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

时间:2019-03-28 15:14:06

标签: c++ c sqlite

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

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

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

1 个答案:

答案 0 :(得分:1)

  

有没有一种方法可以不重置和/或生成新的查询来撤消sqlite3_step()发生的进入进度?

否,从当前版本(3.27.2)开始,没有。 SQLite3仅提供仅转发结果集。

您似乎已经意识到可以通过sqlite3_reset()重置准备好的语句,但是我认为您知道这与后退是不一样的,即使与再次前进都结合在一起与speculation presented in answer to a similar question相反。重置将放弃当前结果集,随后再次执行准备好的语句将导致执行新查询,并检索那些结果。

如果您希望能够在经过前一个结果行之后访问前一个结果行中的数据,而无需执行新查询,则需要将其捕获并保留在某种本地数据结构中。根据您的需要,可能不一定要全部读取您的数据。另一方面,如果您有其他原因而不是重新读取数据以使结果集游标向后移动,那么您将需要找到另一种方法来实现应该达到的目的。