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。请帮忙。谢谢。
query.size()
SQLite 不支持。但是您可以通过变通方法获得行数。QSqlQuery::last ()
检索结果中的最后一条记录(如果可用),并将查询定位在检索到的记录上。调用后,您可以使用andlast()
检索最后一条记录的索引并将查询定位在第一条记录之前:first()
previous()
int numberOfRows = 0;
if(qry.last())
{
numberOfRows = qry.at() + 1;
qry.first();
qry.previous();
}
来自文档:
返回结果的大小(返回的行数),如果无法确定大小或数据库不支持报告有关查询大小的信息,则返回 -1。请注意,对于非 SELECT 语句(isSelect() 返回 false),size() 将返回 -1。如果查询未激活(isActive() 返回 false),则返回 -1。
要确定受非 SELECT 语句影响的行数,请使用 numRowsAffected()。
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;
}