4
爲什麼下面的代碼無法正常工作:SQLite:爲什麼我不能在主數據庫有一個開放的準備語句時分離數據庫?
#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, NULL);
sqlite3_exec(pDb, "INSERT INTO Test(a) VALUES(1)", NULL, NULL, NULL);
sqlite3_prepare_v2(pDb, "SELECT * FROM Test", -1, &stmt, NULL);
sqlite3_step(stmt);
sqlite3_exec(pDb, "ATTACH 'Test.db' as Other;", NULL, NULL, NULL);
sqlite3_exec(pDb, "DETACH Other;", NULL, NULL, &errmsg);
printf("error: %s\n", errmsg);
return 0;
}
輸出:
error: database Other is locked
如果我的sqlite3_step(stmt)
後做sqlite3_reset(stmt)
,它的工作原理。
爲什麼不相關數據庫上的打開語句會鎖定「其他」數據庫?我無法在文檔中找到解釋。
感謝您對此有所瞭解。這真的是隱藏的。我想這是一個很好的習慣來重置()所有語句不再需要時... – Geier 2013-03-21 08:33:05