无法在golang中打开SQLite数据库:“无法打开数据库文件[已恢复]” - 错误

时间:2017-12-10 23:10:01

标签: unit-testing go sqlite

我刚刚开始学习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)
    }
 }

所以在我看来,可以找到数据库文件,但由于其他限制,它无法打开。我的所有代码都没有并发性。到目前为止我只有一种测试方法,所以即使测试同时完成,它到目前为止只是一个线程。也许有人有个主意!这个问题似乎很基本,我的代码真的没有那么多了。

1 个答案:

答案 0 :(得分:0)

private async void OpenPicture(object sender, RoutedEventArgs e) { var openPicker = new Windows.Storage.Pickers.FileOpenPicker(); openPicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary; openPicker.FileTypeFilter.Add(".png"); openPicker.FileTypeFilter.Add(".jpg"); Windows.Storage.StorageFile file = await openPicker.PickSingleFileAsync(); if (null != file) { try { Windows.Storage.Streams.IRandomAccessStream stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read); using (var inputStream = stream.GetInputStreamAt(0)) { await MyInkCanvas.InkPresenter.StrokeContainer.LoadAsync(stream); } stream.Dispose(); //rootPage.NotifyUser(inkCanvas.InkPresenter.StrokeContainer.GetStrokes().Count + " stroke(s) loaded!", NotifyType.StatusMessage); } catch (Exception ex) { // Report I/O errors during load. //rootPage.NotifyUser(ex.Message, NotifyType.ErrorMessage); } } } 通常不执行任何数据库操作,它只是初始化驱动程序(有关详细信息,请参阅sql.Open docs)。在后台调用驱动程序的sql.Open方法。

这意味着在您尝试执行操作时通常会遇到第一个错误:Open()

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

并且在第一次错误检查后移动db.Exec