QtSql查询执行成功却无结果显示,求助排查问题原因
Qt SQL查询结果无法显示的排查方案
问题背景
原Label控件可正常显示SQL查询结果,删除重建Label并修改查询语句后,结果无法显示。已验证:
query.exec()返回true,SQL语句执行成功- 数据库连接正常(
db.open()返回true) - .pro文件已引入sql模块,使用MariaDB驱动(
QSqlDatabase::addDatabase("QMYSQL")) - 异常点:
query.value(0)为空值
排查与解决步骤
必须先移动到结果集记录
exec()返回true仅代表SQL执行合法,不代表有数据返回,必须调用query.next()移动到第一条记录后才能取值:QSqlQuery query; if (query.exec("SELECT * FROM artists;")) { if (query.next()) { QString name = query.value(0).toString(); ui->label_2->setText(name); } else { ui->label_2->setText("无匹配数据"); } } else { qDebug() << "查询错误:" << query.lastError().text(); }验证字段与结果集
- 用
query.record().fieldName(0)打印第一列的字段名,确认是否是你期望的字段 - 用循环计数的方式(部分数据库驱动不支持
query.size())查看结果集行数,确认是否有数据 - 改用字段名取值更可靠,比如
query.value("artist_name").toString()(替换为实际字段名)
- 用
权限验证
- 用相同数据库账号,在客户端工具(如MySQL Workbench)执行
SELECT * FROM artists;,确认是否能返回数据 - 执行
SHOW GRANTS FOR '你的用户名'@'连接主机';,检查账号是否拥有artists表的SELECT权限
- 用相同数据库账号,在客户端工具(如MySQL Workbench)执行
控件关联检查
- 确认新建的
label_2在UI文件中已正确命名,代码中控件名拼写无错误 - 先给
label_2设置固定文本(如ui->label_2->setText("测试");),验证控件本身是否能正常显示
- 确认新建的
内容的提问来源于stack exchange,提问作者feelsunbreeze
相关产品推荐
相关产品推荐

