sqlite3:non Riesce a chiudere a causa di dichiarazioni non finalizzati

Ho due sqlite connessioni e eseguire come di seguito(CMyDatabase è una classe derivata di 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();

Ora, quando invoco dbConnection1->CloseDataBase(). Ho incontrato con l’errore indicato come ‘in Grado di chiudere a causa della non finalizzati dichiarazioni’. Qualcuno può spiegare la ragione e il metodo di risoluzione del problema? Grazie!

  • Si prega di riformattare la tua domanda con comandi in un blocco di codice per migliorare la leggibilità
InformationsquelleAutor user26404 | 2008-12-17



One Reply
  1. 6

    Dipende dal wrapper che si sta utilizzando. Sto indovinando si utilizza uno simile a cppSQLite3

    Se questo è vero, allora è necessario emettere una CppSQLite3Query::finalizzare comando per dire sqlite3 che hai finito con la tua query.

    Dal sqlite3 documentazione qui

    sqlite3_finalize()

    Questa routine distrugge una dichiarazione preparata creata da una precedente chiamata a sqlite3_prepare(). Ogni istruzione preparata deve essere distrutto mediante una chiamata a questa routine al fine di evitare perdite di memoria.

Lascia un commento