我有两个sqlite连接并执行如下(CMyDatabase是sqlite3的派生类):
CMyDatabase* dbConnection1 = new CMyDatabase;
dbConnection1->OpenDataBase(CQCommon::GetModulePath() + L"test.db");
CMyDatabase* dbConnection2 = new CMyDatabase;
dbConnection2->OpenDataBase(CQCommon::GetModulePath() + L"test.db");
dbConnection2->BeginTrans();
CString updateStr("update ImageAlbumEntry set ImageID = 2 where ID = 1;");
dbConnection2->ExecNoQuery(updateStr);
CString queryStr("select ImageID from ImageAlbumEntry where ID = 1;");
CppSQLite3Query queryResult;
dbConnection2->ExecQuery(queryStr, queryResult);
cout<<queryResult.getIntField(0)<<endl;
dbConnection2->EndTrans(TRUE);
dbConnection2->CloseDataBase();
dbConnection1->CloseDataBase();
现在,当我调用dbConnection1-&gt; CloseDataBase()时。我遇到了由于“未完成的陈述而无法关闭”的错误。任何人都可以解释原因并解决问题的方法吗?谢谢!
答案 0 :(得分:6)
取决于您使用的包装器。我猜你使用的是cppSQLite3
如果确实如此,那么您需要发出 CppSQLite3Query :: finalize 命令来告诉sqlite3您已完成查询。
来自sqlite3文档here
<强> sqlite3_finalize()强>
此例程会破坏先前调用sqlite3_prepare()创建的预准备语句。必须使用对此例程的调用来销毁每个预准备语句,以避免内存泄漏。