You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QSqlQuery执行SELECT *仅返回两列,16列表为何无法获取全部列?

问题分析与解决:QSqlQuery仅返回前2列的原因

哥们,你这里踩了一个非常典型的API混淆坑!问题的核心在于你搞混了行数和列数的获取方法:

  • QSqlQuery::size() 这个函数返回的是查询结果集的总行数,不是列数!你预期的是16列,但这里拿到的max == 2正好是你查到的2行数据,所以循环只执行了2次,自然只能取到前2列。
  • 要获取结果集的列数,你需要用 query.record().count() —— QSqlRecord 对象包含了当前结果集的列元数据,count()方法会返回列的总数。

修正后的代码示例

QSqlQuery query(f_db);
query.prepare(QString("SELECT * FROM my_table WHERE status = 'good'"));
query.exec();

// 先移动到第一行(如果有数据的话)
if(query.next()) {
    // 获取列数,而不是行数!
    int const max_cols(query.record().count()); 
    for(int idx(0); idx < max_cols; ++idx) {
        QVariant v(query.value(idx));
        // 这里就能遍历到所有16列的数据了
    }
}

额外提示

如果你需要遍历所有行和列,正确的做法应该是外层循环遍历每一行(用query.next()来控制),内层循环遍历当前行的所有列:

QSqlQuery query(f_db);
query.prepare(QString("SELECT * FROM my_table WHERE status = 'good'"));
query.exec();

while(query.next()) {
    int col_count = query.record().count();
    for(int idx = 0; idx < col_count; ++idx) {
        QVariant v = query.value(idx);
        // 处理每一列的数据
    }
}

内容的提问来源于stack exchange,提问作者Alexis Wilke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:56:29