我有两个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-> CloseDataBase()时。我遇到了错误消息:“由于未完成的语句而无法关闭”。谁能解释问题的原因和解决方法?谢谢!

最佳答案

取决于您使用的包装。我猜您正在使用与cppSQLite3类似的

如果是这样,则需要发出CppSQLite3Query :: finalize命令来告诉sqlite3您已完成查询。

从sqlite3文档here

sqlite3_finalize()
该例程破坏了由先前调用sqlite3_prepare()创建的准备好的语句。必须使用对此例程的调用来销毁每个准备好的语句,以避免内存泄漏。

关于exception - sqlite3:由于未完成的语句而无法关闭,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/373369/

10-10 10:36