我正在尝试获取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,但选择count(*)会返回120k结果。
它出了什么问题?
答案 0 :(得分:5)
如果无法确定大小或数据库不支持报告有关查询大小的信息,则返回... -1。
SQLite确实不支持这一点。
请注意,缓存120k记录效率不高(没有人会查看所有这些记录);你应该以某种方式过滤它们以使结果降低到可管理的大小。
答案 1 :(得分:3)
此行计数代码提取适用于基于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;
}