我有多个使用相同SQLite数据库的进程(c ++,Windows 8)。我使用SQLITE_CONFIG_SERIALIZED
和PRAGMA busy_timeout = 60000;
配置了连接。使用的日记记录模式 - DELETE
。
测试场景:
在该进程#1无法写入数据库之后 - 它在调用SQLite API(sqlite3_step,sqlite3_finalize)后立即收到SQLITE_BUSY
。进程#2仍然使用连接而没有任何问题。
我没有任何未关闭的交易,我对数据库没有任何长期操作。还有什么可以导致这个?
我使用来自进程内多个线程的相同SQLite连接。 SQLite文档说配置选项SQLITE_CONFIG_SERIALIZED
就可以了。这条规则有什么例外吗?
答案 0 :(得分:0)
SQLite获取sqlite3_prepare
中数据库/表的锁定,并在sqlite3_finalize
中释放它。锁的类型取决于您的SQL表达式。
如果您创建了STMT - 您需要执行它并尽快完成。否则你会阻止不同的连接。
我的应用程序创建了准备好的STMT列表并将其保留到最后。通常这是滥用SQLite。
链接: