c++ - 有没有办法在 C/C++ 中撤消 SQLite3 步骤调用?

标签 c++ c sqlite

我正在使用的系统使用 SQLite3 数据库作为后台日志存储,每个条目作为两列条目:|time|data|。重放日志就像准备一个获取所有条目的语句一样简单,每个 sqlite3_step() 调用都会及时返回数据。

从那时起,我们就尝试使用专门的工具来根据需要进行前进和跳过。现在,我们发现自己处于需要倒退一个或多个条目的情况。有没有一种方法可以在不重置和/或生成新查询的情况下撤消 sqlite3_step() 发生的入口推进?

sqlite3_reset() 不是合适的解决方案,因为它会将数据库指针返回到数据库中的第一个条目。我希望返回到上次 sqlite3_step() 调用的前一个条目。

最佳答案

Is there a way without resetting and/or generating a new query to undo the entry-advancement that happens with sqlite3_step()?

没有,从当前版本 (3.27.2) 开始,没有。 SQLite3 只提供只进结果集。

你似乎已经意识到通过 sqlite3_reset() 重置准备好的语句的可能性,但我想你明白这与后退不是一回事,即使与单步结合再次转发结果,与speculation presented in answer to a similar question相反.重置会放弃当前结果集,随后再次步进准备好的语句会导致执行新查询,并检索那些结果。

如果您希望能够在跳过前一个结果行后访问该数据而不执行新查询,那么您需要将其捕获并保留在某种本地数据结构中。根据您的需要,这可能不一定是所有您已阅读的数据。另一方面,如果除了重新读取数据之外还有其他原因希望将结果集游标向后移动,那么您将需要找到另一种方法来实现预期服务的任何目的。

关于c++ - 有没有办法在 C/C++ 中撤消 SQLite3 步骤调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55401083/

相关文章:

c++ - 如何将请求的客户端连接的 IP 与 QTcpSocket 类中已识别的 IP 之一进行比较?

c++ - 用不同字符替换单词的代码

sql - 将 SQLite FTS3 与 INTEGER 列一起使用

java - 从输入流读取错误 - 无法解析符号

python - 使用 Python、SQLALchemy、Sqlite 设置/插入多对多数据库

c++ - reinterpret_cast - 整数、枚举、指针或成员指针类型的表达式可以转换为它自己的类型

c++ - std::list 中的 rbegin() 永远不等于指向列表的迭代器?

c - c - 如何在文件中写入两个字符串,用空格或逗号分隔?

c - linux 内核中的 mmap() 用于访问未映射的内存

我们可以使用贪心策略来解决这个问题吗?如果不是,我们如何使用动态规划来解决这个问题?