Получение количества строк из 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()работает для меня.

Другие вопросы по тегам