在我的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