C++ SQLite 查询只工作一次。我的代码有什么问题?

C++ SQLite query works just once. What's wrong with my code?

本文关键字:代码 我的 什么 问题 一次 查询 SQLite 工作 C++      更新时间:2023-10-16

我有一个函数女巫包含此代码,当我第一次调用此函数时,它会给出结果,但此后每次调用它都没有结果返回。我需要解决这个问题。

char query[150];
sprintf(query, "SELECT building, inner, level, position, village FROM Builds WHERE village=%d AND inner=%d", villageId, side);
std::string path=FileUtils::getInstance()->getWritablePath() + "data.db3";
sqlite3 *pDB;
int result = sqlite3_open(path.c_str(), &pDB);
sqlite3_stmt *selectStmt;
sqlite3_prepare(pDB, query, -1, &selectStmt, NULL);
std::list<Build> buildings;
// get data
while (1) {
    int s;
    s = sqlite3_step(selectStmt);
    if (s == SQLITE_ROW) {
        Build building;
        building.building = sqlite3_column_int(selectStmt, 0);
        building.inner = sqlite3_column_int(selectStmt, 1);
        building.level = sqlite3_column_int(selectStmt, 2);
        building.position = sqlite3_column_int(selectStmt, 3);
        building.village = sqlite3_column_int(selectStmt, 4);
        buildings.push_back(building);
    }
    else {
        break;
    }
}
// clode database
sqlite3_finalize(selectStmt);
sqlite3_close(pDB);
// return data
return buildings;

提前谢谢你!

通过减少关闭和重新打开数据库来修复。我也用了

sqlite3_open_v2(path.c_str(), pDB, SQLITE_OPEN_READWRITE, NULL);

用于打开和

sqlite3_open_v2(path.c_str(), pDB, SQLITE_OPEN_CREATE, NULL);

在执行开始时

相关文章: