我刚开始学习 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)
}
}
所以在我看来,可以找到数据库文件,但由于其他限制无法打开。我的所有代码都没有并发性。到目前为止我只有一种测试方法,所以即使测试是同时进行的,到目前为止也只有一个线程。也许有人有想法!这个问题似乎很基本,我的代码真的没有比这个更多的了。
最佳答案
sql.Open
通常不执行任何数据库操作,它只是初始化驱动程序(详见 sql.Open docs)。在后台调用驱动程序的 Open()
方法。
这意味着第一个错误通常是在尝试执行操作时遇到的,在您的例子中是:db.Exec
。
至于实际错误:如果这是在测试中,则可能是您的路径不正确(例如:如果测试数据库位于测试的子目录中,我认为测试运行器的当前目录会有所不同) .尝试切换到绝对路径(或在运行时计算的路径)。
还有一个小问题:在第一次错误检查之后移动 defer db.Close()
。
关于unit-testing - 无法在 golang : "unable to open database file [recovered]"-error 中打开 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47744451/