【问题标题】:sqlite3:Unable to close due to unfinalised statementssqlite3:由于未完成的语句而无法关闭
【发布时间】:2010-09-27 06:23:10
【问题描述】:

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

【问题讨论】:

  • 请用代码块中的命令重新格式化您的问题以提高可读性

标签: exception sqlite


【解决方案1】:

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

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

来自 sqlite3 文档here

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 2023-03-11
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多