在 Go 中使用 SQLite3 資料庫時,使用者可能會遇到「資料庫已鎖定」錯誤。此錯誤表示存在多個並發線程嘗試存取相同資料庫檔案。
要解決此問題,請確保程式中僅維護與資料庫的單一連線。雖然關閉查詢結果很重要,但考慮建立多個資料庫檔案句柄也很重要。
以下程式碼片段示範了這個問題:
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中的「Database is Locked」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!