SQLite:当主数据库有一个打开的预准备语句时,为什么我不能分离
发布时间:2020-12-12 18:55:00 所属栏目:百科 来源:网络整理
导读:为什么以下代码不起作用: #include stdio.h#include sqlite3.hint main(void){ sqlite3 *pDb; sqlite3_stmt *stmt; char *errmsg; sqlite3_open(":memory:",pDb); sqlite3_exec(pDb,"CREATE TABLE Test(a INTEGER)",NULL,NULL); sqlite3_exec(pDb,"INSERT I
为什么以下代码不起作用:
#include <stdio.h> #include <sqlite3.h> int main(void) { sqlite3 *pDb; sqlite3_stmt *stmt; char *errmsg; sqlite3_open(":memory:",&pDb); sqlite3_exec(pDb,"CREATE TABLE Test(a INTEGER)",NULL,NULL); sqlite3_exec(pDb,"INSERT INTO Test(a) VALUES(1)",NULL); sqlite3_prepare_v2(pDb,"SELECT * FROM Test",-1,&stmt,NULL); sqlite3_step(stmt); sqlite3_exec(pDb,"ATTACH 'Test.db' as Other;",NULL); sqlite3_exec(pDb,"DETACH Other;",&errmsg); printf("error: %sn",errmsg); return 0; } 输出: error: database Other is locked 如果我在sqlite3_step(stmt)之后执行sqlite3_reset(stmt),它可以工作. 为什么不相关数据库上的开放语句会锁定“其他”数据库?我在文档中找不到解释. 解决方法transaction documentation说:
事务始终为affect all attached databases,因此打开的事务将锁定所有数据库. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |