c++ - SQLite DB(带 WAL)在准备 "select"statmement 时被锁定 - 为什么?

标签 c++ sqlite

我看到我的读取被 WAL 模式下的数据库写入阻塞 - 我很困惑为什么。

我的设置:

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

在 WAL 模式下,我相信在发生写入时应该可以有并发读取器。

然而,当我使用 sqlite3_prepare_v2 准备 select 语句时,我看到“数据库已锁定”

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

感谢任何提示,

谢谢:)

最佳答案

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

The sqlite3_reset(S) interface resets the prepared statement S back to the beginning of its program.

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

关于c++ - SQLite DB(带 WAL)在准备 "select"statmement 时被锁定 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12416988/

相关文章:

c++ - 更改 OpenCV 函数标准参数

c++ - Windows 编程,窗口打不开,没有构建错误

android - 为什么每个事务都会创建新的(SQLite)数据库文件?

android - 将 sqlite 数据库存储到 google drive

c++ - 如何使用纹理和 MeshConvert.exe 构建 SdkMesh?

c++ - 在 Visual Studio 中使用 C++ 的条件断点

python - 将脚本语言嵌入到游戏引擎的编程语言中的目的是什么?

ios - 何时在 iOS 应用程序中使用 sqlite3_close

python - 是否可以在单个 sqlite 语句中同时插入和更新?

sqlite - 如何将 Sqlite 与 ionic 2 rc.0 一起使用?