【问题标题】:Unable to open SQLite database in golang: "unable to open database file [recovered]"-error无法在 golang 中打开 SQLite 数据库:“无法打开数据库文件 [已恢复]”-错误
【发布时间】:2017-12-10 23:10:00
【问题描述】:

我刚开始学习 golang,不确定我的错误是概念上的还是语言上的。

这很奇怪,因为错误只发生在对我的代码进行单元测试时。如果我“跑步”一切正常。作为 sqlite 驱动程序,我使用 mattn/go-sqlite3

这里是问题发生的地方:

    func dbExec(command *string) {
    db, err := sql.Open("sqlite3", dbPath) // Path and driver are set correcrtly
    defer db.Close()
    if err != nil { //No problem here
        panic(err)
    }
    _, err = db.Exec(*command)
    if err != nil { //Here the errorNo14 "Unable to open the database file" occurs
        panic(err)
    }
 }

所以在我看来,可以找到数据库文件,但由于其他限制而无法打开。我的所有代码都没有并发。到目前为止,我只有一个测试方法,所以即使测试将同时进行,到目前为止也只有一个线程。也许有人有想法!问题似乎很基本,我的代码真的没有更多。

【问题讨论】:

    标签: unit-testing go sqlite


    【解决方案1】:

    sql.Open 通常不执行任何数据库操作,它只是初始化驱动程序(详见sql.Open docs)。后台调用驱动的Open()方法。

    这意味着在尝试执行操作时通常会遇到第一个错误,在您的情况下:db.Exec

    至于实际错误:如果这是在测试中,很可能您的路径不正确(例如:如果测试数据库在测试的子目录中,我认为测试运行器的当前目录会有所不同) .尝试切换到绝对路径(或在运行时计算的路径)。

    还有一个小笨蛋:在第一次错误检查后移动defer db.Close()

    【讨论】:

    • 非常感谢马克!你的想法完全正确。我的道路是相对的。运行单元测试时,路径为假,运行 main.go 时,它适合。超级简单,如果你知道的话。
    猜你喜欢
    • 2011-05-01
    • 2021-10-15
    • 2015-10-18
    • 1970-01-01
    • 2014-11-11
    • 2014-08-30
    • 2020-06-10
    • 2020-07-03
    • 1970-01-01
    相关资源
    最近更新 更多