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

时间:2014-12-15 22:20:55

标签: c++ sqlite select

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

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;

提前谢谢!

1 个答案:

答案 0 :(得分:0)

通过减少关闭和重新打开数据库来解决问题。我也用过

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

开放和

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

在执行开始时

相关问题