如何让sqlite出错而不是在golang中创建丢失的数据库文件?

Tim*_*ell 3 sqlite go

我打开了一个连接到用户在golang程序中选择的sqlite数据库的连接.如果他们提供了一个不存在的文件的路径,那么我想抛出一个错误,而不是创建该文件.

我正在使用mattn/gp-sqlite3驱动程序.据我所知,文档没有提到这个功能.

如果数据库丢失,这与Make SQLite连接失败相同(删除/移动)但是对于golang而不是C#.golang驱动程序似乎使用不同的格式来描述与C#驱动程序的连接,因此我不知道那里的答案是否转换为golang.

Tim*_*per 6

go-sqlite3库目前无法实现这一点.查看源代码,您可以看到SQLITE_OPEN_CREATE始终传递给open函数:

rv := C._sqlite3_open_v2(name, &db,
    C.SQLITE_OPEN_FULLMUTEX|
        C.SQLITE_OPEN_READWRITE|
        C.SQLITE_OPEN_CREATE,
    nil)
Run Code Online (Sandbox Code Playgroud)

我建议你在包上打开一张票来添加这样的功能.

同时,您可以在创建数据库之前添加以下代码(请记住存在竞争条件,这就是为什么您仍应在库本身中请求此功能):

_, err := os.Stat("db.sqlite3")
if os.IsNotExist(err) {
    panic("database doesn't exist")
}
// TODO: create db
Run Code Online (Sandbox Code Playgroud)