1. 首页
  2. 主题
  3. Go问与答

请问如何将sqlite3的连接封装到函数中?

taatcc · · 2626 次点击
```go package dao ...... func DbConn() (*sql.DB,error) { db, err := sql.Open("sqlite3", sqlite_db_path) if err != nil { panic("conn db err:") } return db,nil } ``` 然后其它文件中引用 ```go db,err := DbConn() db, err := sql.Open("sqlite3", "/var/monitor.db") checkErr(err) defer db.Close() stmt, err := db.Prepare("INSERT INTO monitor(item, value) values(?, ?)") checkErr(err) res, err := stmt.Exec(metric.Item,metric.Value) defer stmt.Close() checkErr(err) ...... ``` 运行一段时间就报错:dbcheck:database is locked 是DbConn连接封装的有问题导致 的吗?
这代码略无力吐槽 DbConn里open的sql对象没有close. 你的代码里,db一共open2次,close1次。 另外你这个应该不是真实代码,不然会报错。
#3
更多评论
同一个 sqlite 文件,同时只能有一个 open 的 db connection,估计多个 groutine 同时打开了吧
#1
倒是提醒我了,那我那个conn封装的对吗,返回的db是*sql.DB类型,总感觉哪里不对
#2

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中