QSqlQuery缓冲区大小
问题描述:
我在PostgresDB(55GB)中有一个大表。我想用QT在C++中扫描它,总结结果并将其发送回数据库。据我所知,默认情况下,QSqlQuery将所有数据传输到主内存中。是否可以陈述对象的显式缓冲区大小?是否也可以告诉QT/Postgres我希望逐步获得答案,即不是在所有数据被完成后才发送给C++程序?QSqlQuery缓冲区大小
我使用的代码如下:
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
}
我在网上看到一个答案最近,但我花了几个小时没有任何成功再次寻找答案。
答
我会拆分我的选择(当然在交易中)。首先确定iMaxLines
大小选择喜欢的:
SELECT COUNT(*) FROM veryLargeTable
如果我现在想读一次只有1000行广告,我可以做事端这样
SELECT attribute FROM veryLargeTable LIMIT 1000 OFFSET X
哪里X
是可在0迭代,1000 ,2000,...,iMaxLines-1000
此致,Lars