QSqlQuery size() 总是返回 -1
QSqlQuery size() always returns -1
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;
}
相关文章:
- 为什么(-1)%vector::size()总是返回0
- 返回 str vs. str.substr(0,str.size()) 在 leetcode 中给了我不同的输出
- 如何从类成员函数返回指针,例如 size_t * class :: function(); 并使用类析构函数 ~size
- 如何在没有参数的情况下实现返回双向链表大小的函数?int size() const.
- 成员功能在面向对象的框架中返回std :: vector.size()的效率
- vector.size() 返回 1,即使其中有超过 1 个元素
- vector::size() 如何在常量时间内返回向量的大小
- String.length() 或 String.size() 返回带有 "x" (\x5) 的数字
- std::queue::size() 可以在 size() == 0 的 pop() 之后返回一个巨大的数字
- 如果 vec.size() == 0,vec.data() 返回什么
- 为什么QVector::size返回int ?< / h1 >
- QSqlQuery size() 总是返回 -1
- Vector size()返回看似随机的大整数
- 结构体的vector.size()将返回什么
- C++错误:"size"声明为返回函数的函数
- std::match_results::size返回什么?
- Linux下的OpenCV:无法获取Mat size (cv:: size),只返回MSize
- QVector size()返回大小为0
- 当size为0时,STRNCMP的返回值是多少?
- new(size, value) Type[0]返回的指针是否合法,是否可以用来构建数组?