当前位置:  开发笔记 > 数据库 > 正文

sqlite3:由于未定义的语句而无法关闭

如何解决《sqlite3:由于未定义的语句而无法关闭》经验,为你挑选了1个好方法。

我有两个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<EndTrans(TRUE);

dbConnection2->CloseDataBase();
dbConnection1->CloseDataBase();

现在,当我调用dbConnection1-> CloseDataBase()时.我遇到了由于"未完成的陈述而无法关闭"的错误.任何人都可以解释原因并解决问题的方法吗?谢谢!



1> Noah..:

取决于您使用的包装器.我猜你使用的是类似cppSQLite3的

如果确实如此,那么您需要发出一个CppSQLite3Query :: finalize命令来告诉sqlite3您已完成查询.

从这里的sqlite3文档

sqlite3_finalize()
此例程销毁先前调用sqlite3_prepare()创建的预准备语句.必须使用对此例程的调用来销毁每个预准备语句,以避免内存泄漏.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有