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