golang数据库打开函数歧义

时间:2014-10-04 02:57:20

标签: sql sqlite go

在go中,您使用

调用打开的数据库
DB, err = sql.Open("sqlite3", "./bar.db")

这将返回类型为*sql.DB的数据库,函数和类型都是database/sql的成员。

但是,在sqlite3驱动程序包中,还有另一个Open函数返回*sqlite3.Conn类型。

我注意到sqlite3驱动程序包中定义的某些函数对使用默认database/sql打开的数据库不起作用。

此外,sqlite3包中的函数与database/sql的函数类似,即QueryExec,它们返回不同的类型。

database/sql包含一个返回类型Query的函数*sql.Rows

mxk/sqlite/sqlite3mattn/go-sqlite3都有一个Query函数,它会返回完全不同的类型。

我想在我的数据库连接上运行mxk/sqlite/sqlite3的{​​{1}}等函数,但它不是正确的类型。我是否必须重新编写所有代码才能使用sqlite3驱动程序打开数据库连接,而不是使用BusyTimeout的{​​{1}}?如果您不能将任何驱动程序的函数与该泛型连接一起使用,database/sql的{​​{1}}函数有什么优势?

1 个答案:

答案 0 :(得分:1)

嗯,正如docs州......

  

直接使用此软件包或使用" sqlite3"创建数据库连接。数据库/ sql驱动程序。直接接口(如下所述)公开了SQLite特有的功能,例如增量I / O和在线备份。当应用程序必须支持多个数据库引擎时,建议使用该驱动程序。

...当您需要 sqlite特定的函数(您的用例)时,您将使用sqlite3连接;对于通用数据库连接,您将使用数据库驱动程序(您的代码)。

这是完全合乎逻辑的,因为通用驱动程序如何处理特定于各种数据库的函数?运行时错误?

所以你有一个选择:所有sqlite函数 - > sqlite conn或处理多个sql数据库 - >通用驱动程序。