c – 在准备“选择”状态时锁定SQLite DB(带WAL) – 为什么?

c – 在准备“选择”状态时锁定SQLite DB(带WAL) – 为什么?,第1张

概述我看到我的读取被处于WAL模式的数据库写入阻止 – 我很难过为什么. 我的设置: > SQLite3数据库,journal_mode = WAL,同步= NORMAL > Mulitple C进程(确切地说是3个)使用数据库 – 这些进程中的任何方法都使用sqlite3_open_v2打开和关闭它们自己的非共享连接. >插入数据的方法以SQLITE_OPEN_READWRITE模式打开数据库 >从 我看到我的读取被处于WAL模式的数据库写入阻止 – 我很难过为什么.

我的设置:

> sqlite3数据库,journal_mode = WAL,同步= norMAL
> Mulitple 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) – 为什么?全部内容,希望文章能够帮你解决c – 在准备“选择”状态时锁定SQLite DB(带WAL) – 为什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1239453.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存