簡體   English   中英

如何等待數據庫鎖在system.data.sqlite中清除

[英]How to wait for the database lock to clear in system.data.sqlite

我的應用程序以以下方式工作:每個查詢使用sqlite3打開一個到數據庫文件的新連接,並且在查詢運行后,它使用close()方法關閉該連接。

問題:我的應用程序創建的另一個線程需要執行INSERT查詢,但是在這種情況下,我的應用程序的“主體”主體正在執行某些SELECT,它們似乎發生沖突,並且由於sqlite不允許在該處進行選擇和更新。同時,它解決問題。 即,應用程序凍結30秒,此后sqlite連接超時,我得到:

A first chance exception of type 'System.Data.SQLite.SQLiteException' occurred in System.Data.SQLite.dll
System.Data.SQLite.SQLiteException (0x80004005): database is locked

有什么方法可以指示查詢等待鎖清除,然后再嘗試繼續? 還是其他解決問題的方法?

那30秒就是等待。

您可以使用PRAGMA busy_timeout或相應的連接參數來增加等待時間,但是如果某些事務阻塞數據庫的時間長於此時間,則這無濟於事。

如果您可以忍受其限制,請嘗試啟用WAL模式 ,在此模式下 ,寫程序不會阻止讀者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM