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。请帮忙。感谢。
答案 0 :(得分:10)
query.size()
。但是您可以通过变通方法获得行数。 QSqlQuery::last ()
检索结果中的最后一条记录(如果可用),并将查询定位在检索到的记录上。调用last()
后,您可以检索最后一条记录的索引,并使用first()
和previous()
在第一条记录之前定位查询:
int numberOfRows = 0;
if(qry.last())
{
numberOfRows = qry.at() + 1;
qry.first();
qry.previous();
}
答案 1 :(得分:3)
来自doc:
返回结果的大小(返回的行数),如果是,则返回-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
答案 2 :(得分:2)
对于我自己,我使用此功能
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;
}