我在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();
}
}
控制台输出:
found "blue"
Number of columns: 1
QSqlQuery::value: not positioned on a valid record
"" "blue"
答案 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 = ?");