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

问题描述 投票:0回答:1

我发现向前和向后迭代行是有区别的。使用

QSqlQuery::next()
may 进行前向迭代只会得到一行,但是使用
QSqlQuery::previous()
进行后向迭代将always 找到所有行。无论是否显式设置前向迭代,都没有影响。

关于 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());
}

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


这种行为对我来说并不总是可以重现,有时会发生,有时不会。在本例中,数据库包含“多”行。问题正是出现在这段代码片段中。有没有同样问题的人? 我当前的环境:Windows 7 (SP1)、Qt 4.8.5。

database sqlite qt select qsqlquery
1个回答
0
投票
以下问题已在这里讨论过多次

,这完全是错误的。您提供的参考资料与您所看到的行为“无关”。 您可能在替换 // Do something with row... 的代码中存在错误。您需要完整地显示该代码。您还可能只是看到这样一个事实:

在问题发生时

,表中实际上只有一行。这可能是由于与修改数据库的其他代码进行交互,但您从不共享该代码,所以我们怎么知道?


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


© www.soinside.com 2019 - 2024. All rights reserved.