QSqlQuery query;
QString queryText("SELECT * FROM section");
query.exec(queryText);
qDebug() << query.size(); //always -1
while (query.next()) qDebug() << query.value(0).toString(); //got 16 records
方法 size()
始终返回 -1。请帮忙。谢谢。
SQLite不支持query.size()
。但是您可以通过解决方法获取行数。 QSqlQuery::last ()
检索结果中的最后一条记录(如果可用(,并将查询定位在检索到的记录上。调用 last()
后,您可以使用 first()
和 previous()
检索最后一条记录的索引并将查询定位在第一条记录之前:
int numberOfRows = 0;
if(qry.last())
{
numberOfRows = qry.at() + 1;
qry.first();
qry.previous();
}
来自文档:
返回结果的大小(返回的行数(,如果 无法确定大小或数据库不支持 报告有关查询大小的信息。请注意,对于非选择。 语句 (isSelect(( 返回 false(,size(( 将返回 -1。如果 查询不活跃(isActive(( 返回 false(,返回 -1。
要确定受非 SELECT 语句影响的行数, 使用 numRowsImpact((。
http://qt-project.org/doc/qt-4.8/qsqlquery.html#size
您的查询isSelect
且处于活动状态,但 SQLite 是查询大小不能直接可用的数据库之一。
为了证明,例如调用:
qDebug() <<db.driver()->hasFeature(QSqlDriver::QuerySize);
它返回false
对于我自己,我使用这个函数
int sqlSize(QSqlQuery query)
{
int initialPos = query.at();
// Very strange but for no records .at() returns -2
int pos = 0;
if (query.last())
pos = query.at() + 1;
else
pos = 0;
// Important to restore initial pos
query.seek(initialPos);
return pos;
}