我有两个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()时.我遇到了由于"未完成的陈述而无法关闭"的错误.任何人都可以解释原因并解决问题的方法吗?谢谢!
取决于您使用的包装器.我猜你使用的是类似cppSQLite3的
如果确实如此,那么您需要发出一个CppSQLite3Query :: finalize命令来告诉sqlite3您已完成查询.
从这里的sqlite3文档
sqlite3_finalize()
此例程销毁先前调用sqlite3_prepare()创建的预准备语句.必须使用对此例程的调用来销毁每个预准备语句,以避免内存泄漏.