Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengelakkan Kunci Pangkalan Data SQLite3 dalam Go?

Bagaimana untuk Mengelakkan Kunci Pangkalan Data SQLite3 dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-12-07 20:53:101006semak imbas

How to Avoid SQLite3 Database Locks in Go?

Kunci Pangkalan Data SQLite3 dalam Go

Apabila bekerja dengan pangkalan data SQLite3 dalam Go, pembangun mungkin menghadapi ralat "pangkalan data dikunci". Ini biasanya berlaku apabila beberapa utas cuba mengakses fail pangkalan data yang sama secara serentak. Walau bagaimanapun, walaupun hanya satu sambungan diwujudkan dalam kod, pemegang fail pangkalan data tambahan masih boleh dibuat.

Dalam contoh kod yang disediakan, pemegang pangkalan data dibuat dua kali. Pertama, dalam fungsi getDatabaseHandle, dan kemudian sekali lagi dalam fungsi dosomething. Ini boleh menyebabkan berbilang pemegang fail pangkalan data dibuka serentak, mengakibatkan ralat "pangkalan data dikunci".

Untuk menyelesaikan isu ini, tangguhkan penutupan keputusan pertanyaan menggunakan penangguhan. Dalam contoh kod, ubah suai fungsi dosomething seperti berikut:

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()
}

Dengan menangguhkan penutupan keputusan pertanyaan, Go akan menutupnya secara automatik sebaik sahaja fungsi keluar, memastikan pengendalian fail pangkalan data dikeluarkan dengan betul.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Kunci Pangkalan Data SQLite3 dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn