Как получить количество строк и столбцов с помощью QtSql?

Я прочитал документацию Qt и не могу найти прямой путь от самого языка, чтобы получить количество строк и столбцов из результата запроса. Единственный способ, который я могу придумать, - это использовать SELECT COUNT(*) FROM table_name в самом запросе mysql.

Как и в случае с другим коннектором (PHP, python, C++ и т. д.), насколько я знаю, нет прямого способа получить эти значения. Может я что-то упускаю. Итак, есть ли возможный способ сделать это? Может быть, что-то вроде этого:

int rows = db_connection->get_row_counts ();
int columns = db_connection->get_column_counts ();

person Mas Bagol    schedule 16.04.2015    source источник


Ответы (2)


Вы можете использовать QSqlQuery::size() для получения количества строк и QSqlRecord::count() для получения количества столбцов:

QSqlQuery qry;
qry.prepare("SELECT * FROM someTable");
qry.exec();

qDebug() << "Number of Rows: " << qry.size();
qDebug() << "Number of columns: " << qry.record().count();
person Nejat    schedule 16.04.2015

Чтобы добавить к ответу Неджата, для базы данных, созданной SQLite, метод размера не будет работать и возвращает -1. Я считаю, что это связано с тем, что SQLite не поддерживает этот тип информации о запросе (https://doc.qt.io/qt-5/qsqlquery.html#size).

Если не существует более чистого метода, это будет работать для получения количества строк:

 QSqlQuery query;
 int row_count = 0;
 
 // Run some query
 query.exec("SELECT * FROM SOME_TABLE");

 while(query.next())
     row_count++;

Кроме того, можно воспользоваться функцией SQL COUNT:

   QSqlQuery query;
   int row_count = 0;

   query.exec("SELECT COUNT(*) FROM SOME_TABLE");

   if(query.first())
       row_count = query.value(0).toInt();
person Jason Reek    schedule 28.11.2020