首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据库处于SQLITE_BUSY状态的sqlite3确切位置

数据库处于SQLITE_BUSY状态的sqlite3确切位置
EN

Stack Overflow用户
提问于 2014-08-12 19:20:48
回答 1查看 538关注 0票数 0

对于其他线程和进程,sqlite3数据库将处于SQLITE_BUSY状态。(默认模式为SERIALIZEnot WAL的数据库)

一个简单的例子来说明这个问题:

代码语言:javascript
复制
char buffer[] = "SELECT sessionid FROM sessions WHERE something < 1000";
sqlite3_prepare_v2(db, buffer, strlen(buffer), &stmt, 0)

// IS DB SQLITE_BUSY HERE ? PLACE 1

while( sqlite3_step(stmt) == SQLITE_ROW )
{
 // IS DB SQLITE_BUSY HERE ? PLACE 2
}

 // IS DB STILL SQLITE_BUSY HERE? PLACE 3
sqlite3_finalize(stmt);
EN

回答 1

Stack Overflow用户

发布于 2014-08-12 22:00:34

我知道一个事实,sqlite3_prepare_v2sqlite3_step在使用SQLITE_BUSY时都会出错(文档上这么说,我已经遇到过很多次了)。sqlite3_finalize的文档不太清楚,但我的印象是sqlite3_finalize只是用于内存管理,所以它不应该进行任何数据库访问。

sqlite3_step是最有可能发生这种情况的地方,因为它实际上执行的是"INSERT INTO...""COMMIT"之类的事情,这些事情往往会对数据库造成很大的负担。

当涉及到并发性时,SQLite并不是非常有用。默认情况下,它甚至不提供任何公平性保证(尽管只要并发发生在同一进程中,您就可以自己编写)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25262971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档