准备“选择”语句时SQLite DB(带WAL)被锁定 - 为什么?

时间:2012-09-14 01:25:33

标签: c++ sqlite

我看到我的读取因为处于WAL模式的数据库的写入而被阻止 - 我很难过为什么。

我的设置:

  • SQLite3数据库,journal_mode = WAL,同步=正常
  • 多个C ++进程(确切地说是3个)使用数据库 - 这些进程中的任何方法都会打开并关闭与sqlite3_open_v2的非共享连接。
  • 插入数据的方法以SQLITE_OPEN_READWRITE模式
  • 打开数据库
  • 从数据库读取的方法(即只执行select语句)以SQLITE_OPEN_READONLY模式打开数据库

在WAL模式下,我认为应该可以在发生写入时同时使用读者。

然而,当我使用sqlite3_prepare_v2

准备一个select语句时,我看到“数据库已被锁定”

我可能做错什么导致读者被阻止?我误解了“读”实际上是什么吗?

任何提示赞赏,

谢谢:)

1 个答案:

答案 0 :(得分:0)

检查每个sqlite3_step后是否有sqlite3_reset,因为这是导致数据库被锁定错误的一种情况。 在使用sqlite3_prepare准备语句并使用sqlite3_step执行它之后,您需要始终使用sqlite3_reset重置它。

  

sqlite3_reset(S)接口将准备好的语句S重置为   它的计划的开始。

希望这能解决你的问题... !!!