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
相关产品推荐
相关产品推荐

