使用next()前向迭代SQLite的QSqlQuery只会找到一行



以下问题已被多次讨论。然而,从来没有解决这个问题本身。正如我发现的那样,向前迭代和向后迭代行是有区别的。使用QSqlQuery::next() 的正向迭代可能只得到一行,而使用QSqlQuery::previous()的反向迭代将总是找到所有行。无论是否显式设置前向迭代,都没有影响。

编辑:

引用删除

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

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

然而,这将只产生一行。向后迭代将找到所有行。

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

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

编辑:这种行为对我来说并不总是可复制的,有时会发生,有时不会。在这种情况下,数据库包含的多于一行。问题正好发生在这段代码中。有人有同样的问题吗?

Edit 2:看来这个bug已经在Qt 4.8.5中修复了。

我的当前环境:Windows 7 (SP1), Qt 4.8.5.

下面的问题已经在这里讨论过几次了,这是完全错误的。您提供的引用与您所看到的行为无关

替换// Do something with row...的代码中可能存在bug。您需要完整地显示该代码。您还可以简单地看到,当问题发生时,表中实际上只有一行。这可能是由于与修改数据库的其他代码的交互,但您从未共享该代码,因此我们如何知道?

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

相关内容

  • 没有找到相关文章

最新更新