我的应用程序按以下方式工作:每个查询使用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
在尝试继续之前,是否有某种方法可以指示查询等待锁定清除?或许还有其他一些解决问题的方法?
答案 0 :(得分:3)
那些30秒 等待。
您可以使用PRAGMA busy_timeout或相应的连接参数来增加等待时间,但如果某些事务阻止数据库的时间超过此值,则无效。
如果您可以接受其限制,请尝试启用WAL mode,其中作者不会阻止读者。