在运行我们的网络应用程序的linux服务器上,我们还有一个使用的小应用程序 sqlite(用c写的)。
为了执行数据库操作,我们使用以下命令:
sqlite3_prepare_v2
sqlite3_bind_text or sqlite3_bind_int
sqlite3_step
sqlite3_finalize
偶尔出现并发情况,我收到以下错误:
database is locked
所以我想:"当一个进程写入某个记录时,会发生这种情况 另一个人试图读取完全相同的记录。"
所以在每次step-command之后,我都会检查这个错误。当它发生时,我等了几毫秒再次尝试。
但sqlite错误"数据库被锁定"仍然发生了。
所以我改变了每一步命令和后面的代码行。不知何故,我认为这个数据库被锁定了#34;错误只能在步骤命令中发生。
但错误不断发生。
我现在的问题是:
我必须在任何sqlite3命令之后检查" error_code == 5" (数据库被锁定)?
非常感谢
答案 0 :(得分:1)
如果您收到错误代码5(忙),可以使用立即交易来限制此错误。如果您能够立即开始事务,SQLite会保证在您提交之前不会收到繁忙的错误。
另请注意,SQLite没有行级锁定。整个数据库都被锁定。使用WAL日记,您可以使用一个作者和多个读者。使用其他日记方法,您可以使用一个编写器或多个读取器,但不能同时使用它们。