1

是否可以重新使用 sqlite3 输出?我有这样的查询:

            error = sqlite3_prepare_v2(conn,SQL_STMT_GET_FILE,-1, &res, &tail);
            error = sqlite3_bind_text(res, 1,file,strlen(file), SQLITE_STATIC);   assert(error == SQLITE_OK);
            if (error != SQLITE_OK) {
            handle_error("No matching record found.");

并解析结果

    while (sqlite3_step(res) == SQLITE_ROW) 
                //do something here with results for device X

现在我想重新使用输出'res',例如,代码流就像

    while (sqlite3_step(res) == SQLITE_ROW) 
                //do something here with results for device X


    //reset the cursor to starting position and scan through the records.

    while (sqlite3_step(res) == SQLITE_ROW) 
                //do something here with results for device Y

如何做到这一点?我不希望第二次重新运行相同的 sql 语句并获取结果。

4

1 回答 1

2

您必须自己缓存数据,或者重新运行查询。

在此页面上阅读有关 Sqlite 和滚动光标的原因,包括:

问题是 sqlite3_step() 函数根本不单步执行预先计算的结果集。考虑问题的更好和更现实的方法是假设每个准备好的语句实际上是一个计算机程序。您正在调试器中运行该程序,并且在计算深处某处的单个语句上设置了一个断点。调用 sqlite3_step() 函数就像在调试器中按下“运行”按钮,从而要求调试器运行程序,直到它退出或遇到断点。Sqlite3_step() 如果遇到断点则返回 SQLITE_ROW,如果完成则返回 SQLITE_DONE。如果您命中断点,则可以查看局部变量以查找“行”的值。然后你可以按“运行”

于 2012-11-26T04:17:24.997 回答