【发布时间】:2014-10-07 23:32:09
【问题描述】:
在 go 中,你调用一个用
打开的数据库DB, err = sql.Open("sqlite3", "./bar.db")
这会返回一个*sql.DB类型的数据库,函数和类型都是database/sql的成员。
但是,在 sqlite3 驱动程序包中,还有另一个 Open 函数返回 *sqlite3.Conn 类型。
我注意到sqlite3 驱动程序包中定义的一些函数在使用默认database/sql 打开的数据库上不起作用。
另外,sqlite3包中有一些函数与database/sql的函数类似,分别是Query和Exec,返回的类型不同。
database/sql 包含一个函数Query,它返回类型*sql.Rows。
mxk/sqlite/sqlite3 和 mattn/go-sqlite3 都有一个 Query 函数,它们返回完全不同的类型。
我想在我的数据库连接上运行诸如mxk/sqlite/sqlite3 的BusyTimeout 之类的函数,但它不是正确的类型。我是否必须重新编写所有代码才能打开与 sqlite3 驱动程序的数据库连接,而不是使用database/sql 的Open?如果您不能将驱动程序的任何功能与该通用连接一起使用,那么database/sql 的Open 功能有什么优势?
【问题讨论】: