1

QMake バージョン 3.0

Qt バージョン 5.0.2

使用時

QSqlQuery query(QString("SELECT device_text_id FROM device"));
qDebug() << query.exec();

query.exec() で false になり、クエリオブジェクトに結果が返されませんが、使用すると

QSqlQuery query;
query.prepare("SELECT device_text_id FROM device");
qDebug() << query.exec();

私は真で正しいデータが返されます。

QSqlQueryのドキュメントでは、上記の両方のケースで使用されるコンストラクターがあります。

QSqlQuery(const QString & query = QString(), QSqlDatabase db = QSqlDatabase())

詳細については、postgres (v9.1) ログを確認しました。最初に提示された方法でクエリが実行されるたびに、このエラーが発生します。

CET ERROR:  syntax error at end of input at character 9
CET STATEMENT:  EXECUTE 

何か不足していますか?最初のアプローチが機能しないのはなぜですか?

4

1 に答える 1

2

文字列でコンストラクターを呼び出すと、そのクエリが直接実行されます。オブジェクトが構築されると、クエリはすでに実行されています。

次に を呼び出すと.exec()、 で準備されたクエリを実行しようとしますprepare()。しかし がなかっprepare()たので、その試みは失敗します。この失敗によりfalse、プログラムで表示される戻り値が発生します。

于 2013-11-12T19:55:45.960 に答える