QSqlQuery for SQLite 在与 next() 的前向迭代中只会找到一行

bka*_*sbk 5 database sqlite select qt qsqlquery

不时讨论以下问题。然而,问题本身从来没有解决方案。正如我发现的那样,向前和向后迭代行是有区别的。与向前迭代QSqlQuery::next() 可能导致只有一行,但是落后的迭代QSqlQuery::previous()永远找不到的所有行。无论是否显式设置前向迭代,都没有影响。

编辑: 参考文献已删除

关于 Qt 文档,正确的方法如下:

QSqlQuery q = db.exec("SELECT * FROM Table");
while (q.next()) {
    // Do something with row...
}
Run Code Online (Sandbox Code Playgroud)

但是,这将导致只有一行。向后迭代将找到所有行。

QSqlQuery q = db.exec("SELECT * FROM Table");
if (q.last()) {
    do {
        // Do something with row...
    } while (q.previous());
}
Run Code Online (Sandbox Code Playgroud)

向后迭代可能非常缓慢,应该避免。有谁知道为什么这在前向迭代中不起作用?

编辑:这种行为对我来说并不总是可以重现,有时会发生,有时不会。该数据库包含多个在这种情况下,多行。问题恰好出现在此代码片段中。有没有人有同样的问题?

编辑 2:似乎该错误已在 Qt 4.8.5 中修复。

我当前的环境:Windows 7 (SP1)、Qt 4.8.5。

Rei*_*ica 0

以下问题已在这里讨论过多次,这完全是错误的。您提供的参考与您所看到的行为无关。

您替换的代码中可能存在错误// Do something with row...。您需要完整地显示该代码。您还可以简单地看到这样一个事实:问题发生时表中实际上只有一行。这可能是由于与修改数据库的其他代码进行交互,但您从不共享该代码,所以我们怎么知道?

如果您只是向前迭代,则应该调用q.setForwardOnly(true),因为这将使某些数据库后端的速度更快。