gpt4 book ai didi

sql - golang数据库开放功能歧义

转载 作者:IT王子 更新时间:2023-10-29 01:43:05 25 4
gpt4 key购买 nike

在 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 包含一个返回类型 *sql.Rows 的函数 Query

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

我想在我的数据库连接上运行诸如 mxk/sqlite/sqlite3BusyTimeout 之类的函数,但它不是正确的类型。我是否必须重新编写所有代码才能使用 sqlite3 驱动程序打开数据库连接,而不是使用 database/sqlOpen?如果您不能通过该通用连接使用驱动程序的任何功能,那么database/sqlOpen 功能有何优势?

最佳答案

嗯,作为docs状态...

Database connections are created either by using this package directly or with the "sqlite3" database/sql driver. The direct interface, which is described below, exposes SQLite-specific features, such as incremental I/O and online backups. The driver is recommended when your application has to support multiple database engines.

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

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

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

关于sql - golang数据库开放功能歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26189175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com