在我的C++頁面中,我有一個preparement聲明獲取嘗試通過statemetn
sqlite3_stmt *sqlstmt;
當它通過INT
string query;
query = "select * from A;"
int rc = sqlite3_prepare_v2(db,query.c_str(),0,&stmt,0);
if (SQLITE_OK != rc){ return; }
功能傳遞的數據返回SQLITE_OK到sqlite3_step時SQL_MISUSE錯誤。
然後開始下一行。
int rc;
rc = sqlite3_step(sqlstmt);
//rc = 21 here.
除了SQLITE3文檔。我相信現在的版本是3.07.14.01。
http://www.sqlite.org/c3ref/step.html
SQLITE_MISUSE意味着,這個程序被稱爲不當。也許它是在已準備好的語句上調用的,該語句已經完成或者之前返回了SQLITE_ERROR或SQLITE_DONE。或者在同一時刻兩個或更多線程正在使用相同的數據庫連接。
對於直到幷包括3.6.23.1,調用sqlite3_reset SQLite的所有版本()是sqlite3_step後需要()返回比SQLITE_ROW其他任何sqlite3_step的任何後續調用之前()。未能使用sqlite3_reset()重置準備好的語句將導致sqlite3_step()返回SQLITE_MISUSE。但是在版本3.6.23.1之後,sqlite3_step()在這種情況下自動調用sqlite3_reset()而不是返回SQLITE_MISUSE。這不被視爲兼容性中斷,因爲任何曾接收到SQLITE_MISUSE錯誤的應用程序都按定義中斷。 SQLITE_OMIT_AUTORESET編譯時選項可用於恢復傳統行爲。
實際代碼功能
矢量cDataInterpretor :: getWorkingSet(INT用戶ID){ 矢量t_val; vector retVal; sqlite3 * db; int rc; rc = sqlite3_open(databasePath.c_str(),& db);如果(rc!= SQLITE_OK){sql_3_close(db); return t_val; } string query =「select * from insp_Assets;」; char * errorMessage;
sqlite3_stmt *sqlstmt;
//rc = sqlite3_exec(db, query.c_str(), 0, 0, &errorMessage);
cout << "preparing statement"<<endl;
rc = sqlite3_prepare_v2(db, query.c_str(), 0, &sqlstmt, 0);
cout << "prepare code: "<<rc << endl;
if(rc != SQLITE_OK){
sqlite3_close(db);
return t_val;
}
cout << "Resetting call." <<endl;
rc = sqlite3_reset(sqlstmt);
cout << "about to start while"<<endl;
rc =sqlite3_step(sqlstmt);
cout << rc<<"|" << SQLITE_ROW <<"|" << SQLITE_OK <<"|"<<SQLITE_DONE<< endl;
while(rc == SQLITE_ROW){
//sset retVal (id,name,code,typeId,reportTypeId,parentAsset);
int id,typeID, reportTypeId;
id = sqlite3_column_int(sqlstmt, 0);
string name(reinterpret_cast<char const *>(sqlite3_column_text(sqlstmt, 1)));
string code(reinterpret_cast<char const *>(sqlite3_column_text(sqlstmt, 2)));
typeID = sqlite3_column_int(sqlstmt, 3);
reportTypeId = sqlite3_column_int(sqlstmt, 4);
string parentAsset(reinterpret_cast<const char *>(sqlite3_column_text(sqlstmt, 5)));
cout <<"Fetched Asset Data: "<< id <<"|"<<name<<"|"<<code<<"|"<<typeID<<"|"<<reportTypeId<<"|"<<parentAsset << endl;
Asset a (id, name, code, typeID, reportTypeId, parentAsset);
retVal.push_back(a);
rc = sqlite3_step(sqlstmt);
}
cout << "while ended, about to return."<<endl;
sqlite3_close(db);
return retVal;
}
的'sqlite3_prepare_vb'功能不存在。請正確複製並粘貼失敗的代碼。另外,請包括您編譯的查詢。 – cdhowie
是的,錯誤的。 v2 * – Fallenreaper
好的,太好了。和查詢? – cdhowie