如何在system.data.sqlite中等待数据库锁清除
本文关键字:等待 数据库 清除 sqlite system data | 更新日期: 2023-09-27 18:18:28
我的应用程序以以下方式工作:每个查询都使用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模式,其中写入器不会阻塞读取器。