내 개체에서 중복 sqlite 코드를 줄이려고합니다. 이렇게하려면 sqlite 상호 작용이 있고 sqlite3_stmt를 반환하는 메서드가 필요했습니다. 내 문제는 sqlite3_stmt 포인터가 항상 null입니다. 내 질문은, 내가 뭔가 잘못하고있는 또는 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
어때? 진술은 결코 아무것도 설정되지 않습니다! sqlForResults 내부에서 'statement'매개 변수는 무언가로 설정되지만 다른 스택 프레임의 'statement'변수에는 영향을 미치지 않습니다. 이를 수행하려면 참조 또는 포인터 포인터로 전달해야합니다. – Bwmat