gpt4 book ai didi

mysql - 你能在 Qt 中将一列(MySQL)数据放入向量中而不进行迭代吗?

转载 作者:行者123 更新时间:2023-11-29 14:50:44 24 4
gpt4 key购买 nike

我在 MySQL 数据库中有数据,我想将其放入向量中以便对其进行一些数学运算。这个问题可能不是 QSqlTableModels 特有的,而是任何 QAbstractTableModel 特有的,但我不确定。现在,我已经

model->QSqlQueryModel::setQuery(q); //model is a QSqlTableModel, q gets 1 column of data
QVector<QVariant> var;
var.reserve(num_rows);
QVariant datum;
QModelIndex idx;
for (i=0; i<num_rows; ++i)
{
idx = model->index(i,0,QModelIndex());
datum = model->data(idx);
var.push_back(datum);
}

有什么方法可以改进这一点,例如我可以使用较低级别的复制操作?

编辑:按照 beduin 的建议,我尝试在不使用 QSqlTableModel 的情况下执行此操作,而是简单地迭代 QSqlQuery 。这导致性能显着降低。例如,使用上述方法执行的复制操作需要 380 毫秒,而迭代 QSqlQuery 则需要 525 毫秒,与其他查询也有类似的差异。

最佳答案

如果您只想将从数据库检索的数据放入向量中,则可能不需要使用 QSqlTableModel。您只需使用 QSqlQuery 。这是一个例子:

QSqlQuery dbQuery(dbConnection); // constructing QSqlQuery with given connection

dbQuery.setForwardOnly(true); // pretends to speed up executions on some databases
dbQuery.setMode(Q3SqlCursor::ReadOnly);

bool result = dbQuery.exec(queryString); // executing given query
if (!result) {
//error processing
}
while (dbQuery.next()) {
// column - desired column number to retrieve value. Count starts from 0.
var.push_back(dbQuery.value(column));
}

不幸的是,我不知道有什么方法可以在不迭代 QSqlQuery 结果的情况下做到这一点。

关于mysql - 你能在 Qt 中将一列(MySQL)数据放入向量中而不进行迭代吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5785591/

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