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

时间:2017-08-19 23:20:30

标签: go sqlite

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

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

这与Make SQLite connection fail if database is missing? (deleted/moved)相同,但对于golang而不是C#。 golang驱动程序似乎使用不同的格式来描述与C#驱动程序的连接,因此我不知道那里的答案是否转换为golang。

1 个答案:

答案 0 :(得分:5)

go-sqlite3库目前无法实现。 Looking at the source,您可以看到SQLITE_OPEN_CREATE始终传递给open函数:

rv := C._sqlite3_open_v2(name, &db,
    C.SQLITE_OPEN_FULLMUTEX|
        C.SQLITE_OPEN_READWRITE|
        C.SQLITE_OPEN_CREATE,
    nil)

我建议您在程序包上open a ticket添加此类功能。

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

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