在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
的{{1}}等函数,但它不是正确的类型。我是否必须重新编写所有代码才能使用sqlite3驱动程序打开数据库连接,而不是使用BusyTimeout
的{{1}}?如果您不能将任何驱动程序的函数与该泛型连接一起使用,database/sql
的{{1}}函数有什么优势?
答案 0 :(得分:1)
嗯,正如docs州......
直接使用此软件包或使用" sqlite3"创建数据库连接。数据库/ sql驱动程序。直接接口(如下所述)公开了SQLite特有的功能,例如增量I / O和在线备份。当应用程序必须支持多个数据库引擎时,建议使用该驱动程序。
...当您需要 sqlite特定的函数(您的用例)时,您将使用sqlite3连接;对于通用数据库连接,您将使用数据库驱动程序(您的代码)。
这是完全合乎逻辑的,因为通用驱动程序如何处理特定于各种数据库的函数?运行时错误?
所以你有一个选择:所有sqlite函数 - > sqlite conn或处理多个sql数据库 - >通用驱动程序。