gpt4 book ai didi

c++ - 从 QSqlTableModel 获取数据并放入 QVector 的最快方法

转载 作者:太空宇宙 更新时间:2023-11-04 13:39:02 25 4
gpt4 key购买 nike

我需要从 QSqlTableModel 复制两列并放入 QVector。

我正在尝试这个:

ParameterData pd;
QSqlTableModel *m = mapTbModels.value(table);
QList<QSqlField> parameterList = getFields(table);

for (int j = 0; j <parameterList.size(); j++) {
QSqlField f = parameterList[j];
QVector<QPointF> v;
if (f.type() != QVariant::Int)
continue;
else {
pd.name = f.name();
timer.start();
for (int i = 0; i < m->rowCount(); i++)
v << value(m, i, f.name());
qDebug() << "Database" << timer.elapsed();
}
pd.data = v;
pd.table = table;
emit data(pd);
emit status(QString::number(j*100/parameterList.size()));
QCoreApplication::processEvents();
}

最快的方法是什么?

最佳答案

我曾经用 Qt 5.2 和 postgres 做过一些性能测试来检查 qsql 的特性。事实证明,使用 QSqlTableModel 比使用像

这样的自己的 SQL 查询慢大约 1000 倍
    QSqlQuery query("",db);
query.prepare("SELECT a.fueltype_longname, coalesce(a.bunkerlog_amount,0) FROM (\
SELECT f.fueltype_longname, b.bunkerlog_amount, rank() OVER (PARTITION BY b.bunkerlog_fueltype ORDER BY b.bunkerlog_id DESC) FROM data.t_bunkerlog2 b\
RIGHT JOIN data.t_fueltype f ON b.bunkerlog_fueltype = f.fueltype_longname \
) a WHERE a.rank=1");
query.exec();

因此对于数据密集型应用程序,请使用查询/准备/执行。如果您只想向用户显示简单的表格,为方便起见,请使用 QSqlTableModel 等。

关于c++ - 从 QSqlTableModel 获取数据并放入 QVector<QPointF> 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28486127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com