Получение количества строк из QSqlQuery, но получено -1
Я пытаюсь получить количество строк QSqlQuery, драйвер базы данных qsqlite
bool Database::runSQL(QSqlQueryModel *model, const QString & q)
{
Q_ASSERT (model);
model->setQuery(QSqlQuery(q, my_db));
rowCount = model->query().size();
return my_db.lastError().isValid();
}
Запрос здесь является запросом выбора, но я все еще получаю -1
;
Если я использую model->rowCount()
Я получаю только те, которые были отображены, например, 256, но select count(*) возвращает результаты 120k.
Что в этом плохого?
3 ответа
В документации сказано:
Возвращает... -1, если размер не может быть определен или база данных не поддерживает создание отчетов о размерах запросов.
SQLite действительно не поддерживает это.
Обратите внимание, что кэширование 120 тыс. Записей не очень эффективно (никто не будет смотреть на все это); Вы должны как-то отфильтровать их, чтобы получить результат до приемлемого размера.
Этот фрагмент кода подсчета строк работает для таблиц на основе SQLite3, а также обрабатывает проблему "fetchMore", связанную с определенными версиями SQLite.
QSqlQuery query( m_database );
query.prepare( QString( "SELECT * FROM MyDatabaseTable WHERE SampleNumber = ?;"));
query.addBindValue( _sample_number );
bool table_ok = query.exec();
if ( !table_ok )
{
DATABASETHREAD_REPORT_ERROR( "Error from MyDataBaseTable", query.lastError() );
}
else
{
// only way to get a row count, size function does not work for SQLite3
query.last();
int row_count = query.at() + 1;
qDebug() << "getNoteCounts = " << row_count;
}
Получил ту же проблему,
query.numRowsAffected()
работает для меня.