sqlite3: невозможно закрыть из-за незавершенных утверждений - PullRequest
3 голосов
/ 17 декабря 2008

У меня есть два соединения 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 (). Я встретился с ошибкой, обозначенной как «Невозможно закрыть из-за незавершенных заявлений». Может кто-нибудь объяснить причину и решить метод проблемы? Спасибо!

1 Ответ

6 голосов
/ 30 января 2009

Зависит от того, какую оболочку вы используете. Я предполагаю, что вы используете один похожий на cppSQLite3

Если это так, то вам нужно выполнить команду CppSQLite3Query :: finalize , чтобы сообщить sqlite3, что вы завершили свой запрос.

Из документации по sqlite3 здесь

sqlite3_finalize ()
Эта подпрограмма уничтожает подготовленный оператор, созданный предыдущим вызовом sqlite3_prepare (). Каждый подготовленный оператор должен быть уничтожен с помощью вызова этой подпрограммы во избежание утечек памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...