我想減少我的對象中的重複的sqlite代碼。要做到這一點,我想要一個有sqlite交互的方法,只需返回一個sqlite3_stmt。我的問題是,sqlite3_stmt指針始終爲空。我的問題是,我做錯了什麼或者不能用sqlite完成?使用C++可以從方法返回sqlite3_stmt嗎?
用法:
SqliteIO sqldb;
string GET_CONFIG = "select* from config; ";
sqlite3_stmt *statement;
assert(sqldb.sqlForResults(GET_CONFIG, statement));
assert(statement != NULL); //this fails
方法:
bool SqliteIO::sqlForResults(string pSql, sqlite3_stmt *statement){
bool lbRetVal=false;
if(mDB == NULL){
cerr << "No database to query";
Logger::error("SqlliteIO::getAllScheuled() null database handle");
} else {
sqlite3_busy_timeout(mDB, 2000);
if(sqlite3_prepare_v2(mDB, pSql.c_str(), -1, &statement, 0) == SQLITE_OK) {
lbRetVal = true;
}
string error = sqlite3_errmsg(mDB);
if(error != "not an error"){
cerr << pSql << " " << error << endl;
Logger::error("SqlliteIO::sqlForResults() "+ error + " " +pSql );
}
}
return lbRetVal;
這真的不回答這個問題。即使它被初始化爲null,我仍然沒有從該方法得到結果集。 – Jim 2012-07-18 17:49:51
怎麼樣?聲明從不設置任何東西!在sqlForResults裏面,參數'statement'被設置爲某個值,但是不會影響另一個棧幀中的變量'statement'。你需要通過引用或指針來傳遞。 – Bwmat 2012-07-20 01:33:35