想象一下,我在sqlite表中有3行。
在读取这3行时,我还想根据这3行中的值插入新行。
我对这些行进行选择并使用sqlite3_step函数来获取每一行。
问题是sqlite3_step循环超过3次,我想是因为它也看到了新插入的行。不知何故,光标会重置并且相同的行被读取两次等。
如何让sqlite3_step只读3行?基本上我希望只遍历结果集而不是新行。
感谢。
答案 0 :(得分:1)
sqlite有一个函数可以立即返回所有行;您可以使用它来获取现有行,然后添加新行。我使用它已经有一段时间了,所以我忘记了函数的名称。
答案 1 :(得分:1)
我认为你可以通过在循环之前添加行来启动事务来实现所需的行为,该循环使用sqlite3_step迭代行并在循环之后提交此事务。
答案 2 :(得分:1)
您可以使用变量来保存最后插入的行(当您第一次执行插入时)。如果您的目标是在达到新集时停止处理...插入时返回此值。您还可以使用;
获取最后插入的行sqlite3_last_insert_rowid(sqlite3*)
如果你想跟踪触发插入的行 - 只需在处理它时存储它的rowid。
这将为您提供一个有效的行窗口,以便在
中处理processThisRow = ( currentRowId > lastTriggered && currentRowId < firstInserted );
..或者您可以使用上面建议的单独交易。
希望这有帮助
Rgrds 安德斯
答案 3 :(得分:1)
基本上,这就是我解决这个问题的方法。
我做的更新&amp;通过遍历所有行来删除。但是,只有在完成遍历后才会插入。
感谢您的帮助。