何时检查数据库是否在sqlite中被锁定错误

时间:2017-01-09 14:14:38

标签: sqlite

在运行我们的网络应用程序的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" (数据库被锁定)?

非常感谢

1 个答案:

答案 0 :(得分:1)

如果您收到错误代码5(忙),可以使用立即交易来限制此错误。如果您能够立即开始事务,SQLite会保证在您提交之前不会收到繁忙的错误。

另请注意,SQLite没有行级锁定。整个数据库都被锁定。使用WAL日记,您可以使用一个作者和多个读者。使用其他日记方法,您可以使用一个编写器或多个读取器,但不能同时使用它们。

SQLite Documentation on 'SQLITE_BUSY'