gpt4 book ai didi

Qt:对 PostgreSQL-Server 的 SELECT 查询总是以 NULL 响应

转载 作者:行者123 更新时间:2023-11-29 13:05:37 25 4
gpt4 key购买 nike

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

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

命令是一个简单的 SELECT-Command:

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';)和大小写字母,因为来自谷歌的一些提示 - 没有任何效果。

每个查询都工作得很好,但如果我尝试 SELECT,它总是以 NULL 响应。尽管此 SELECT 中的每一个查询在 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();

最佳答案

Qt 助手 says :

After the query is executed, the query is positioned on an invalid record and must be navigated to a valid record before data values can be retrieved (for example, using 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();
}

关于Qt:对 PostgreSQL-Server 的 SELECT 查询总是以 NULL 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13633055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com