sqlite3_step:如何多次解析输出?

时间:2012-11-26 03:54:30

标签: c linux sqlite

是否可以重用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语句并获取结果。

1 个答案:

答案 0 :(得分:2)

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

了解原因on this page about Sqlite and Scrolling Cursors,,包括:

  

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