Go で SQLite3 データベースを操作する場合、ユーザーは「データベースがロックされています」エラーが発生する可能性があります。このエラーは、同じデータベース ファイルにアクセスしようとしている複数の同時スレッドの存在を示唆しています。
この問題を解決するには、プログラム内でデータベースへの接続が 1 つだけ維持されていることを確認してください。クエリ結果を閉じることは不可欠ですが、複数のデータベース ファイル ハンドルの作成を考慮することも重要です。
次のコード スニペットは問題を示しています。
func main() { database, tx, err := getDatabaseHandle() if err != nil { log.Fatal(err) } defer database.Close() dosomething(database, tx) } func dosomething(database *sql.DB, tx *sql.Tx) error { rows, err := database.Query("select * from sometable where name=?", "some") if err != nil { return err } defer rows.Close() // Deferring the rows.Close() helps resolve the issue if rows.Next() { ... } rows.Close() //some insert queries tx.Commit() }
遅延行の追加に注意してください。 dosomething 関数内の Close()。これにより、データベース ファイル ハンドルが即座に解放され、複数のハンドルの作成が防止されます。
このアプローチに従うことで、Go で SQLite3 データベース接続を効果的に管理し、「データベースがロックされています」エラーを回避できます。
以上がGo の SQLite3 で「データベースがロックされています」エラーを回避するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。