c++ - 如何获取行数

标签 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

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

最佳答案

SQLite 不支持

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

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

关于c++ - 如何获取行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25706408/

相关文章:

SQLite ADO .NET 和 ExecuteScalar()

c++ - 从 Qt 对话框中接受字符串

c++ - "namespace std {}"之前的 "using namespace std;"

c++ - 从静态辅助函数访问私有(private)成员

c++ - 如果 QTreeView 项没有子项,则禁用 QAction

c++ - "0xffffffff00000000"是否表示 32 位和 64 位编译之间存在混淆?

qt - 如何为 QMacStyle 获取整个 Qt 样式表

Android/SQLite - 反引号、单引号还是双引号?

php - SQLite/PHP 只读?

c++ - doxygen 方程显示不正确