1

我最近开始使用 Qt Creator 和 C++,并希望使用 PostgreSQL 数据库来满足我的需要。所以我想出了如何获取驱动程序,包括所有需要的标签并开始执行一些查询。

我创建了新表,插入了一些数据,然后更新了它们。一切都很好,直到我尝试简单地选择一些行。查询刚刚结束,没有错误消息和 NULL 响应。

该命令是一个简单的命令SELECT

query = db.exec("SELECT id FROM users WHERE name = 'Testuser';");

但是一个基本的SELECT也不起作用:

query = db.exec("SELECT * FROM users;");

如果我现在完全复制此查询并将其作为 SQL 语句直接放入 pgAdmin,它就可以正常工作并使用用户 ID 进行响应。

由于谷歌的一些提示,我尝试了表名的引号,我尝试了完整的行名(SELECT users.id FROM public.users WHERE users.name = 'Testuser';)和大小写字母 - 没有任何效果。

每个查询都可以正常工作,但如果我尝试 a SELECT,它总是以 NULL 响应。尽管每个SELECT-Querys 在 pgAdmin 中都可以正常工作。

有人有想法吗?

使用了以下标签:

#include <QDebug>
#include <QtCore/QCoreApplication>
#include <QtSql/QPSQLDriver>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QCryptographicHash>
#include <QSqlError>

完整的代码如下所示:

QString response;
QSqlQuery query;
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");

db.setHostName("127.0.0.1");
db.setPort(5432);
db.setDatabaseName("postgres");
db.setUserName("postgres");
db.setPassword("password");

if (db.open())
{
    query = db.exec("SELECT id FROM users WHERE name = 'Testuser';");
    response = query.value(0).toString();
}

db.close();
4

1 回答 1

2

Qt 助手

执行查询后,查询定位在无效记录上,必须先导航到有效记录,然后才能检索数据值(例如,使用 next())。

所以,你应该这样做以获得它的第一条记录:

query.first();
QString result = return query.record().value(0).toString();

您还可以遍历其记录:

QStringList results;
while (query.next())
{
    QString result = return query.record().value(0).toString();
    results.append(result);
}

检查查询执行错误状态总是一个好主意:

bool res = query.exec(...);
if (res == false)
{
    qDebug() << "SQL ERROR: " << query->lastError().text();
}
于 2012-11-30T06:16:27.090 回答