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

时间:2013-08-08 16:11:52

标签: qt sqlite

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

详细信息如下,但要点是:我从查询中获得了QSqlRecord,并希望访问记录的所有字段,但QSqlRecord.count仅报告一列时显然有两列(在示例中,它们是 id 关键字)。

我是否误解了SQLite以及查询的作用,或者这是我尝试访问记录的问题?


这是我的架构:

enter image description here

这是我的测试数据:

enter image description here

完整代码:

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" 

1 个答案:

答案 0 :(得分: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 = ?");
相关问题