【问题标题】:How do I get sqlite to error instead of creating a missing database file in golang?如何让 sqlite 出错而不是在 golang 中创建丢失的数据库文件?
【发布时间】:2017-08-19 23:20:30
【问题描述】:

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

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

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

【问题讨论】:

    标签: go sqlite


    【解决方案1】:

    目前 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
    

    【讨论】:

      猜你喜欢
      • 2017-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-10
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 2021-06-29
      相关资源
      最近更新 更多