0

qtを使用してデータベースを操作しています。私が必要とすることの 1 つは、入力データとしていくつかのキーセットを使用して、テーブルの一部を取得することです。これは私が使用するコードです:

bool getData(const QList<int> &idlist, QVector<DataStruct> &result)
{
    result.resize(idlist.size());
    QSqlDatabase &dbase = QSqlDatabase::database(conname); //conname is the QString holding the name of a connection
    if (!dbase.transaction())
        return false;
    QString queryString(
            "SELECT <column list> "
            "FROM MyTableAS k "
            "JOIN JoinedTable AS d ON k.foreign_key=d.primary_key "
            "WHERE k.key=:key");
    QSqlQuery *query = new QSqlQuery(QSqlDatabase::database(conname));
    if(!query->prepare(queryString))
    {
        delete query;
        dbase.rollback();
        return false;
    }
    for (int i = 0; i < idlist.size(); i++)
    {
        query->bindValue(":key",idlist[i]);
        if (!query->exec())
        {
            delete query;
            dbase.rollback();
            return false;
        }
        DataStruct &k = result[i];
        memset(&k,0,sizeof(DataStruct));
        if(query->next())
        {
            // fields of structure are mapped to query results
        }
        //result.append(k);
    }
    dbase.commit();
    delete query;
    return true;
}

検索を高速化する方法を考えていました。クエリを変更する必要がありますか? その場合、どのように変更しますか? ここでトランザクションを使用する必要がありますか? データベースの操作方法を別のものに変更する必要がありますか?

少し早いですがお礼を!

4

1 に答える 1