如何获取行数

时间:2014-09-07 01:53:54

标签: c++ qt sqlite qt5 rowcount

我想从上次查询中获取行数 我使用了size()numRowsAffected()函数,但它们都不起作用。

我写了以下代码:

int counter = 0;
QStringList TableHeader;
QSqlQuery qry;
qry.prepare("SELECT *, (SELECT COUNT(*) FROM users) AS count FROM users");
qry.exec();

qDebug() << qry.value("count").toString(); // <<-- print the count of rows

ui->tableWidget->setRowCount(10);
ui->tableWidget->setColumnCount(3);
TableHeader << "Username" << "Password" << "Age";
ui->tableWidget->setHorizontalHeaderLabels(TableHeader);
while (qry.next()) {
    ui->tableWidget->setItem(counter, 0, new QTableWidgetItem(qry.value("username").toString()));
    ui->tableWidget->setItem(counter, 1, new QTableWidgetItem(qry.value("password").toString()));
    ui->tableWidget->setItem(counter, 2, new QTableWidgetItem(qry.value("age").toString()));
    ui->tableWidget->item(counter, 0)->setData(Qt::UserRole, qry.value("id").toString());
    counter++;
}

但不幸的是,这不能正常工作并给我一个错误QSqlQuery::value: not positioned on a valid record

我想通过使用查询或函数来获取行数。

1 个答案:

答案 0 :(得分:3)

SQLite不支持

qry.size()QSqlQuery::last ()检索结果中的最后一条记录(如果可用),并将查询定位在检索到的记录上。调用last()后,您可以检索最后一条记录的索引,并使用first()previous()在第一条记录之前定位查询:

int numberOfRows = 0;
if(qry.last())
{
    numberOfRows =  qry.at() + 1;
    qry.first();
    qry.previous(); 
}