gpt4 book ai didi

c++ - 使用 C++ 可以从方法返回 sqlite3_stmt 吗?

转载 作者:太空宇宙 更新时间:2023-11-04 12:07:11 25 4
gpt4 key购买 nike

我正在尝试减少对象中重复的 sqlite 代码。为此,我想要一种具有 sqlite 交互并仅返回 sqlite3_stmt 的方法。我的问题是 sqlite3_stmt 指针始终为空。我的问题是,我是不是做错了什么,或者这不能用 sqlite 来完成?

用法:

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;

最佳答案

sqlite3_stmt *statement; // this never gets initialized
assert(sqldb.sqlForResults(GET_CONFIG, statement));
assert(statement != NULL); //this fails

该代码块中的语句变量永远不会被初始化(您正在将它的拷贝传递给 sqlForResults())。

坦率地说,你很幸运断言失败了,因为语句可能有任何垃圾值(我猜你的编译器在 Debug模式下变量是零初始化的)

关于c++ - 使用 C++ 可以从方法返回 sqlite3_stmt 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11546230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com