我正在使用的系统使用 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/