Go 中的SQLite3 資料庫鎖定
在Go 中使用SQLite3 資料庫時,開發人員可能會遇到「資料庫已鎖定」錯誤。當多個執行緒嘗試同時存取相同資料庫檔案時,通常會發生這種情況。然而,即使程式碼中只建立了一個連接,仍然可以建立額外的資料庫檔案句柄。
在提供的程式碼範例中,資料庫句柄被建立了兩次。首先,在 getDatabaseHandle 函數中,然後再次在 dosomething 函數中。這可能會導致多個資料庫檔案句柄同時打開,從而導致“資料庫已鎖定”錯誤。
要解決此問題,請使用 defer 延遲查詢結果的關閉。在程式碼範例中,修改 dosomething 函數如下:
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() // Defer closing the query results if rows.Next() { ... } // some insert queries tx.Commit() }
透過延遲關閉查詢結果,Go 會在函數退出時自動關閉它們,確保資料庫檔案句柄被正確釋放。
以上是Go 中如何避免 SQLite3 資料庫鎖定?的詳細內容。更多資訊請關注PHP中文網其他相關文章!