Qt 是否访问SQLite查询记录结果的所有字段?

Qt 是否访问SQLite查询记录结果的所有字段?,qt,sqlite,Qt,Sqlite,我正在学习Qt中的Sqlite,但是在访问QSqlQuery返回的记录值时遇到了问题 详细信息如下,但要点是:我从查询中得到一个QSqlRecord,希望访问记录的所有字段,但QSqlRecord.count只报告一列,而实际上有两列(在示例中,它们是id和关键字) 我是否误解了SQLite和查询的作用,或者这是我如何访问记录的问题 这是我的模式: void MainWindow::on_addKeywordBtn_clicked() { // find a matching key

我正在学习Qt中的
Sqlite
,但是在访问
QSqlQuery
返回的记录值时遇到了问题

详细信息如下,但要点是:我从查询中得到一个
QSqlRecord
,希望访问记录的所有字段,但
QSqlRecord.count
只报告一列,而实际上有两列(在示例中,它们是id和关键字)

我是否误解了SQLite和查询的作用,或者这是我如何访问记录的问题


这是我的模式:

void MainWindow::on_addKeywordBtn_clicked()
{

    // find a matching keyword
    QSqlQuery query(db);
    query.prepare("SELECT keyword FROM keywords WHERE keyword = ?");
    query.addBindValue(QString("blue"));
    query.exec();


    while (query.next()) {
        QString k = query.value(0).toString();
        qDebug() << "found" << k;

        QSqlRecord rec = query.record();

        qDebug() << "Number of columns: " << rec.count();

        int idIndex = rec.indexOf("id");
        int keywordIndex = rec.indexOf("keyword");
         qDebug() << query.value(idIndex).toString() << query.value(keywordIndex).toString();

    }
}

这是我的测试数据:

void MainWindow::on_addKeywordBtn_clicked()
{

    // find a matching keyword
    QSqlQuery query(db);
    query.prepare("SELECT keyword FROM keywords WHERE keyword = ?");
    query.addBindValue(QString("blue"));
    query.exec();


    while (query.next()) {
        QString k = query.value(0).toString();
        qDebug() << "found" << k;

        QSqlRecord rec = query.record();

        qDebug() << "Number of columns: " << rec.count();

        int idIndex = rec.indexOf("id");
        int keywordIndex = rec.indexOf("keyword");
         qDebug() << query.value(idIndex).toString() << query.value(keywordIndex).toString();

    }
}

完整代码:

void MainWindow::on_addKeywordBtn_clicked()
{

    // find a matching keyword
    QSqlQuery query(db);
    query.prepare("SELECT keyword FROM keywords WHERE keyword = ?");
    query.addBindValue(QString("blue"));
    query.exec();


    while (query.next()) {
        QString k = query.value(0).toString();
        qDebug() << "found" << k;

        QSqlRecord rec = query.record();

        qDebug() << "Number of columns: " << rec.count();

        int idIndex = rec.indexOf("id");
        int keywordIndex = rec.indexOf("keyword");
         qDebug() << query.value(idIndex).toString() << query.value(keywordIndex).toString();

    }
}

你的错误在这一行,事实上

  query.prepare("SELECT keyword FROM keywords WHERE keyword = ?");
在代码中,您明确指示数据库只返回一列,正确的解决方案是:

  query.prepare("SELECT * FROM keywords WHERE keyword = ?");


谢谢这很有效。我错误地认为我会得到一个包含所有值的对象(记录)。