0

Sqlite在 Qt 中学习,但在访问由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();

    }
}

控制台输出:

found "blue" 
Number of columns:  1 
QSqlQuery::value: not positioned on a valid record
"" "blue" 
4

1 回答 1

0

你的错误在这一行,实际查询

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

在您的代码中,您明确指示数据库只返回一列,正确的解决方案是:

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

或者

   query.prepare("SELECT id, keyword FROM keywords WHERE keyword = ?");
于 2013-08-08T16:15:37.790 回答