```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() (*sql.DB, error)` 的返回值声明了 `error`,实际上出现err内部`panic`了, 返回`error`形同虚设
```go
// DbConn 可以简略写成
func DbConn() (*sql.DB, error) {
return sql.Open("sqlite3", sqlite_db_path)
}
```
#4
更多评论