1

最近、QtCreatorと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-Queryのすべてが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 に答える