是否可以重用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语句并获取结果。
答案 0 :(得分:2)
您必须自己缓存数据,或重新运行查询。
了解原因on this page about Sqlite and Scrolling Cursors,,包括:
问题是sqlite3_step()函数根本不会逐步执行预先计算的结果集。考虑问题的一种更好,更现实的方法是假设每个准备好的声明都是一个计算机程序。您正在调试器中运行此程序,并且在计算内部的某个位置的单个语句上设置了断点。调用sqlite3_step()函数就像按下调试器中的“运行”按钮,从而要求调试器运行程序,直到它退出或命中断点。 Sqlite3_step()如果遇到断点则返回SQLITE_ROW,如果完成则返回SQLITE_DONE。如果您点击断点,则可以查看局部变量以查找“行”的值。然后你可以再次按“运行”按钮(再次调用sqlite3_step())继续执行,直到下一个断点或程序退出。