Skip to main content
 首页 » 编程设计

exception之sqlite3 :Unable to close due to unfinalised statements

2025年05月04日105luoye11

我有两个 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() 创建的准备好的语句。必须使用对该例程的调用来销毁每个准备好的语句,以避免内存泄漏。