0

我在 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。这导致性能显着降低。例如,使用上述方法进行的复制操作需要 380ms,迭代 QSqlQuery 需要 525ms,并且与其他查询有类似的差异。

4

1 回答 1

1

如果您只想将从数据库中检索到的数据放入向量中,则可能不需要使用 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 结果,我不知道有任何方法可以做到这一点。

于 2011-04-26T05:16:12.027 回答