当多个进程以只读模式访问db时,SQLite C’数据库被锁定
我有一个不会改变的sqlite数据库.
使用sqlite3_open_v2以SQLITE_OPEN_READONLY模式打开数据库连接的多个进程.每个进程都是单线程的 使用官方C/C++ Interface的单合并C源文件从MSVC项目建立连接. 根据SQLite FAQ multiple processes running SELECTs is fine 打开数据库后的每个进程创建4个准备好的SELECT语句,每个语句具有2个可绑定值. 在执行过程中,语句(一次一个)根据需要重复调??用它们 > sqlite3_bind_int 准备好的语句被重用,因此在程序结束之前不会对每个语句调用finalize.最后,数据库在执行结束时关闭. 问题是这些操作中的任何一个都可能失败,错误代码= 5:’数据库被锁定’ 错误代码5是SQLITE_BUSY,网站说明了这一点
互联网的其余部分似乎同意多个READONLY连接是好的.我已经过了一遍又一遍,看不出有什么不妥(我不能在这里发布,我知道,没有帮助) 所以我转向你们,我可能会错过什么? 编辑1: 编辑2: 解决方法所以我使用的工作答案是在返回SQLITE_BUSY时将所有对sqlite的调用包装在循环该函数的函数中.似乎没有一个简单的替代方案.const int bindInt(sqlite3_stmt* stmt,int parameterIndex,int value) { int ret; do ret = sqlite3_bind_int(stmt,parameterIndex,value); while (ret == SQLITE_BUSY) return ret; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |