2012-09-14 24 views
7

我看到我的读取被写入WAL模式的数据库所阻塞 - 我很难理解为什么。SQLite数据库(与WAL)在准备“选择”的时候锁定 - 为什么?

我的设置:

  • sqlite3的数据库,journal_mode = WAL,同步= NORMAL
  • 多张C++的工序(3是精确的)使用的数据库 - 开放这些过程中的任何方法和关闭自己的非与sqlite3_open_v2共享连接。
  • 方法,这些方法将数据SQLITE_OPEN_READWRITE模式下打开数据库
  • 中的方法从数据库中读取(即只执行Select语句)在SQLITE_OPEN_READONLY模式

在WAL模式打开数据库,我相信它应该是在发生写入时可能有并发读取器。

但我看到“数据库已锁定”当我准备用sqlite3_prepare_v2

什么可能我是做错了,这是造成读者被阻塞的select语句?我误解了“阅读”究竟是什么?

任何提示赞赏,

谢谢:)

回答

0

检查你是否每次sqlite3_step后sqlite3_reset,因为这是导致数据库被锁定错误一例。 在用sqlite3_prepare编写语句并用sqlite3_step执行语句之后,您需要始终使用sqlite3_reset重置它。

sqlite3_reset(S)接口将准备好的语句S重置为其程序的开头 。

希望这可以解决您的问题... !!!

相关问题