Memahami Ralat "Pangkalan Data Dikunci" dalam Go dengan Sqlite3
Apabila bekerja dengan pangkalan data SQLite3 dalam Go, menemui "pangkalan data dikunci "Ralat boleh menjadi pengalaman yang membingungkan. Ralat ini biasanya timbul apabila beberapa utas cuba mengakses fail pangkalan data yang sama secara serentak. Walau bagaimanapun, perlu diingat bahawa anda menyebut hanya mendapat satu sambungan dalam program anda.
Setelah menyiasat isu ini dengan lebih lanjut, anda telah mengenal pasti dengan betul bahawa walaupun menutup semua hasil pertanyaan, berbilang pemegang fail pangkalan data telah dibuat. Ini boleh disahkan menggunakan program Opendfileview. Untuk menyelesaikan isu ini, mari analisa kod yang disediakan dan kenal pasti di mana masalah itu mungkin berlaku.
Fungsi getDatabaseHandle memulakan sambungan ke pangkalan data SQLite3 dan memulakan transaksi. Ia mengembalikan pemegang pangkalan data yang dicipta dan penunjuk kepada transaksi. Dalam fungsi dosomething, anda melaksanakan pertanyaan pada pangkalan data, kemudian menutup baris hasil. Selepas itu, anda melakukan beberapa pertanyaan sisipan dalam transaksi, akhirnya melakukannya.
Memeriksa kod, anda mungkin mendapati bahawa panggilan rows.Close() tidak ditangguhkan. Ini boleh membiarkan baris hasil terbuka dan menghasilkan pemegang pangkalan data tambahan. Cuba tangguhkan penutupan baris seperti yang ditunjukkan di bawah:
if err != nil { return err } defer rows.Close() if rows.Next() { ... }
Dengan menangguhkan penutupan baris, anda memastikan baris keputusan ditutup walaupun ralat berlaku. Ini akan membantu melepaskan mana-mana pemegang pangkalan data yang berkaitan dan menghalang ralat "pangkalan data dikunci".
Atas ialah kandungan terperinci Mengapa Program My Go Mendapat Ralat 'Pangkalan Data Dikunci' dalam SQLite3 Walaupun dengan Hanya Satu Sambungan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!