QSqlQuery缓冲区大小

时间:2011-02-09 16:03:14

标签: qt memory memory-management limit

我在PostgresDB中有一个大表(55GB)。我想用CT在C ++中扫描它,汇总结果,并将其发送回数据库。据我所知,默认情况下,QSqlQuery将所有数据传输到主内存中。是否可以为对象声明显式缓冲区大小?是否也可以告诉QT / Postgres我希望逐步得到答案,即,不是在所有数据都被评估之后才被发送到C ++程序?

我使用的代码如下:

QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
db.setHostName("server");
db.setDatabaseName("db");
db.setUserName("user");
db.setPassword("pass");
bool ok = db.open();

QSqlQuery query;
query.setForwardOnly(true);
query.prepare("select attributes veryLargeTable");
while (query.next()) {
    int i = query.value(0).toInt(); // and work with the data
}

我最近在网上看到了一个答案,但我花了好几个小时再次寻找答案而没有任何成功。

1 个答案:

答案 0 :(得分:1)

我会分开我的选择(当然是在交易中)。首先确定选择的iMaxLines大小:

SELECT COUNT(*) FROM veryLargeTable

如果我现在只想阅读1000行广告,我可以做这样的事情

SELECT attribute FROM veryLargeTable LIMIT 1000 OFFSET X

其中X可以从0,1000,2000,...,iMaxLines-1000

迭代

问候,Lars