5

我正在尝试获取 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 结果。

它有什么问题?

4

2 回答 2

7

此行计数代码提取适用于基于 SQLite3 的表,并处理与某些 SQLite 版本相关的“fetchMore”问题。

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;
}
于 2015-11-24T20:33:50.253 回答
5

文档说:

如果无法确定大小或数据库不支持报告有关查询大小的信息,则返回 ... -1。

SQLite 确实不支持这一点。

请注意,缓存 120k 记录不是很有效(没有人会查看所有这些);您应该以某种方式过滤它们以将结果降低到可管理的大小。

于 2013-06-08T06:06:15.283 回答