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 を単純に反復処理しました。これにより、パフォーマンスが大幅に低下しました。たとえば、上記の方法を使用して 380 ミリ秒かかったコピー操作は、QSqlQuery を反復して 525 ミリ秒かかり、他のクエリと同様の違いがありました。

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 に答える