QSqlResult Class
QSqlResult クラスは、特定の SQL データベースからデータにアクセスするための抽象インターフェースを提供します。詳細...
| ヘッダー: | #include <QSqlResult> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Sql) target_link_libraries(mytarget PRIVATE Qt6::Sql) |
| qmake: | QT += sql |
- 継承されたメンバーを含むすべてのメンバーの一覧
- QSqlResult は、データベースクラスの一部です。
パブリック関数
| virtual | ~QSqlResult() |
| virtual QVariant | handle() const |
プロテクトされた型
| enum | BindingSyntax { PositionalBinding, NamedBinding } |
プロテクトされた関数
| QSqlResult(const QSqlDriver *db) | |
| void | addBindValue(const QVariant &val, QSql::ParamType paramType) |
| int | at() const |
| virtual void | bindValue(int index, const QVariant &val, QSql::ParamType paramType) |
| virtual void | bindValue(const QString &placeholder, const QVariant &val, QSql::ParamType paramType) |
| QSql::ParamType | bindValueType(int index) const |
| QSql::ParamType | bindValueType(const QString &placeholder) const |
| QSqlResult::BindingSyntax | bindingSyntax() const |
| QVariant | boundValue(int index) const |
| QVariant | boundValue(const QString &placeholder) const |
| int | boundValueCount() const |
| QString | boundValueName(int index) const |
| QStringList | boundValueNames() const |
| QVariantList | boundValues() const |
| QVariantList & | boundValues() |
| void | clear() |
| virtual QVariant | data(int index) = 0 |
| const QSqlDriver * | driver() const |
| virtual bool | exec() |
| QString | executedQuery() const |
| virtual bool | fetch(int index) = 0 |
| virtual bool | fetchFirst() = 0 |
| virtual bool | fetchLast() = 0 |
| virtual bool | fetchNext() |
| virtual bool | fetchPrevious() |
| bool | hasOutValues() const |
| bool | isActive() const |
| bool | isForwardOnly() const |
| virtual bool | isNull(int index) = 0 |
| bool | isSelect() const |
| bool | isValid() const |
| QSqlError | lastError() const |
| virtual QVariant | lastInsertId() const |
| QString | lastQuery() const |
| virtual int | numRowsAffected() = 0 |
| virtual bool | prepare(const QString &query) |
| virtual QSqlRecord | record() const |
| virtual bool | reset(const QString &query) = 0 |
| void | resetBindCount() |
| virtual bool | savePrepare(const QString &query) |
| virtual void | setActive(bool active) |
| virtual void | setAt(int index) |
| virtual void | setForwardOnly(bool forward) |
| virtual void | setLastError(const QSqlError &error) |
| virtual void | setQuery(const QString &query) |
| virtual void | setSelect(bool select) |
| virtual int | size() = 0 |
詳細な説明
通常、QSqlQuery はQSqlResultのデータベース固有の実装に対する汎用ラッパーを提供するため、QSqlResultの代わりにQSqlQuery を使用します。
独自の SQL ドライバを実装する場合(QSqlDriver をサブクラス化して)、必要なすべての純粋仮想関数およびその他の仮想関数を実装する独自の QSqlResult サブクラスを用意する必要があります。
QSqlDriverも参照してください 。
メンバ型のドキュメント
enum QSqlResult::BindingSyntax
この列挙型は、プリペアードクエリ内でプレースホルダーを指定するためのさまざまな構文を定義します。
| 定数 | 値 | 説明 |
|---|---|---|
QSqlResult::PositionalBinding | 0 | ODBC 形式の位置指定構文を使用し、プレースホルダーとして「?」を使用します。 |
QSqlResult::NamedBinding | 1 | Oracle スタイルの構文を使用し、名前付きプレースホルダー(例: ":id")を使用します。 |
関連項目: bindingSyntax()。
メンバ関数のドキュメント
[explicit protected] QSqlResult::QSqlResult(const QSqlDriver *db)
データベースドライバ `db` を使用して `QSqlResult` を作成します。このオブジェクトは、非アクティブな状態で初期化されます。
isActive() およびdriver()も参照してください 。
[virtual noexcept] QSqlResult::~QSqlResult()
オブジェクトを破棄し、割り当てられていたリソースをすべて解放します。
[protected] void QSqlResult::addBindValue(const QVariant &val, QSql::ParamType paramType)
パラメータ型paramType の値val を、現在のレコード(行)内の次に利用可能な位置にバインドします。
bindValue()も参照してください 。
[protected] int QSqlResult::at() const
結果の現在の行位置(0から始まる)を返します。特殊な値である `QSql::BeforeFirstRow ` または `QSql::AfterLastRow` が返される場合があります。
setAt() およびisValid()も参照してください 。
[virtual protected] void QSqlResult::bindValue(int index, const QVariant &val, QSql::ParamType paramType)
パラメータ型paramType の値val を、現在のレコード(行)のindex の位置にバインドします。
addBindValue()も参照してください 。
[virtual protected] void QSqlResult::bindValue(const QString &placeholder, const QVariant &val, QSql::ParamType paramType)
パラメータ型paramType の値val を、現在のレコード(行)内のplaceholder という名前のフィールドにバインドします。
注: 未定義のプレースホルダーをバインドすると 、未定義の挙動が生じます。
これはオーバーロードされた関数です。
QSqlQuery::bindValue()も参照してください 。
[protected] QSql::ParamType QSqlResult::bindValueType(int index) const
位置index にバインドされた値のパラメータ型を返します。
boundValue()も参照してください 。
[protected] QSql::ParamType QSqlResult::bindValueType(const QString &placeholder) const
指定されたplaceholder 名でバインドされた値のパラメータ型を返します。
これはオーバーロードされた関数です。
[protected] QSqlResult::BindingSyntax QSqlResult::bindingSyntax() const
プリペアードクエリで使用されるバインディング構文を返します。
[protected] QVariant QSqlResult::boundValue(int index) const
現在のレコード(行)のindex の位置にバインドされている値を返します。
bindValue() およびboundValues()も参照してください 。
[protected] QVariant QSqlResult::boundValue(const QString &placeholder) const
現在のレコード(行)において、指定されたplaceholder 名に紐付けられた値を返します。
これはオーバーロードされた関数です。
bindValueType()も参照してください 。
[protected] int QSqlResult::boundValueCount() const
結果に含まれるバインドされた値の数を返します。
boundValues()も参照してください 。
[protected] QString QSqlResult::boundValueName(int index) const
現在のレコード(行)のindex の位置にあるバインドされた値の名前を返します。
boundValue() およびboundValueNames()も参照してください 。
[protected] QStringList QSqlResult::boundValueNames() const
バインドされたすべての値の名前を返します。
boundValue() およびboundValueName()も参照してください 。
[protected] QVariantList QSqlResult::boundValues() const
現在のレコード(行)に対する結果の束縛値のリストを返します。
boundValueCount()も参照してください 。
[protected] QVariantList &QSqlResult::boundValues()
現在のレコード(行)に対する結果のバインドされた値のリストへの可変参照を返します。
これはオーバーロードされた関数です。
boundValueCount()も参照してください 。
[protected] void QSqlResult::clear()
結果セット全体をクリアし、関連するリソースをすべて解放します。
[pure virtual protected] QVariant QSqlResult::data(int index)
現在の行のフィールド「index 」のデータを、QVariant として返します。この関数は、結果がアクティブな状態で、有効なレコードにカーソルが位置しており、かつindex が非負の場合にのみ呼び出されます。派生クラスはこの関数を再実装し、フィールド「index 」の値を返す必要があります。値が特定できない場合は、QVariant()を返す必要があります。
[protected] const QSqlDriver *QSqlResult::driver() const
結果に関連付けられているドライバを返します。これは、コンストラクタに渡されたオブジェクトです。
[virtual protected] bool QSqlResult::exec()
クエリを実行し、成功した場合は true を返し、そうでない場合は false を返します。
prepare()も参照してください 。
[protected] QString QSqlResult::executedQuery() const
実際に実行されたクエリを返します。たとえば、プリペアードクエリでバインド値が使用されたにもかかわらず、基となるデータベースがプリペアードクエリをサポートしていない場合など、渡されたクエリとは異なる場合があります。
exec() およびsetQuery()も参照してください 。
[pure virtual protected] bool QSqlResult::fetch(int index)
結果を任意の(0を起点とする)行index に配置します。
この関数は、結果がアクティブな状態にある場合にのみ呼び出されます。派生クラスはこの関数を再実装し、結果をindex の行に配置するとともに、適切な値を引数としてsetAt()を呼び出す必要があります。成功した場合はtrueを、失敗した場合はfalseを返します。
isActive()、fetchFirst()、fetchLast()、fetchNext()、およびfetchPrevious()も参照してください 。
[pure virtual protected] bool QSqlResult::fetchFirst()
結果を、結果セットの最初のレコード(行 0)に位置合わせします。
この関数は、結果がアクティブな状態にある場合にのみ呼び出されます。派生クラスはこの関数を再実装し、結果を最初のレコードに配置するとともに、適切な値を指定してsetAt()を呼び出す必要があります。成功した場合はtrueを、失敗した場合はfalseを返します。
fetch() およびfetchLast()も参照してください 。
[pure virtual protected] bool QSqlResult::fetchLast()
結果を結果セットの最後のレコード(最後の行)に位置合わせします。
この関数は、結果がアクティブな状態にある場合にのみ呼び出されます。派生クラスはこの関数を再実装し、結果を最後のレコードの位置に配置するとともに、適切な値を引数としてsetAt()を呼び出す必要があります。成功した場合はtrueを、失敗した場合はfalseを返します。
fetch() およびfetchFirst()も参照してください 。
[virtual protected] bool QSqlResult::fetchNext()
結果を、結果内の次に利用可能なレコード(行)に配置します。
この関数は、結果がアクティブな状態にある場合にのみ呼び出されます。デフォルトの実装では、次のインデックスを引数としてfetch()を呼び出します。派生クラスはこの関数を再実装し、別の方法で結果を次のレコードに位置合わせし、適切な値を引数としてsetAt()を呼び出すことができます。成功した場合はtrueを、失敗した場合はfalseを返します。
fetch() およびfetchPrevious()も参照してください 。
[virtual protected] bool QSqlResult::fetchPrevious()
結果を、結果内の前のレコード(行)の位置に移動します。
この関数は、結果がアクティブな状態にある場合にのみ呼び出されます。デフォルトの実装では、前のインデックスを引数としてfetch()を呼び出します。派生クラスはこの関数を再実装し、別の方法で結果を次のレコードの位置に配置し、適切な値を引数としてsetAt()を呼び出すことができます。成功した場合はtrueを、失敗した場合はfalseを返します。
[virtual] QVariant QSqlResult::handle() const
この結果セットの低レベルのデータベースハンドルを返します。ハンドルが存在しない場合は、QVariant でラップされたもの、またはQVariant が返されます。
警告: この関数は、その動作を十分に理解している場合にのみ、細心の注意を払って使用してください 。
警告: 結果が変更された場合(たとえば、結果をクリアした場合など)、ここで返されるハンドルは 無効なポインタになる可能性があります。
警告: 結果がまだ実行されていない場合、ハンドルは NULL になる可能性があります。
警告: PostgreSQL : フォワードオンリーモードでは、QSqlResult のハンドルは、fetch()、fetchFirst()、fetchLast()、fetchNext()、fetchPrevious()、nextResult() を呼び出した後に変更される可能性があります。
ここで返されるハンドルはデータベースに依存するため、アクセスする前にバリアントの型名を照会する必要があります。
この例は、SQLite の結果に対するハンドルを取得します:
QSqlDatabase db = QSqlDatabase::database("sales");
QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
QVariant v = query.result()->handle();
if (v.isValid() && qstrcmp(v.typeName(), "sqlite3_stmt*") == 0) {
// v.data() returns a pointer to the handle
sqlite3_stmt *handle = *static_cast<sqlite3_stmt **>(v.data());
if (handle) {
// ...
}
}次のスニペットは、PostgreSQL または MySQL のハンドルを返します:
if (qstrcmp(v.typeName(), "PGresult*") == 0) {
PGresult *handle = *static_cast<PGresult **>(v.data());
if (handle) {
// ...
}
}
if (qstrcmp(v.typeName(), "MYSQL_STMT*") == 0) {
MYSQL_STMT *handle = *static_cast<MYSQL_STMT **>(v.data());
if (handle) {
// ...
}
}QSqlDriver::handle()も参照してください 。
[protected] bool QSqlResult::hasOutValues() const
クエリのバインド値のうち、少なくとも1つが `QSql::Out ` または `QSql::InOut` である場合は `true ` を返します。それ以外の場合は `false` を返します。
bindValueType()も参照してください 。
[protected] bool QSqlResult::isActive() const
結果に取得すべきレコードがある場合は `true ` を返し、そうでない場合は `false` を返します。
[protected] bool QSqlResult::isForwardOnly() const
結果セットを前方のみスクロールできる場合は `true ` を返し、それ以外の場合は `false` を返します。
setForwardOnly()も参照してください 。
[pure virtual protected] bool QSqlResult::isNull(int index)
現在の行のindex の位置にあるフィールドがnullの場合、true を返します。それ以外の場合はfalse を返します。
[protected] bool QSqlResult::isSelect() const
現在の結果がSELECT 文によるものである場合はtrue を返し、そうでない場合はfalse を返します。
setSelect()も参照してください 。
[protected] bool QSqlResult::isValid() const
結果が有効なレコードの位置にある場合(つまり、結果が最初のレコードより前や最後のレコードより後に位置していない場合)、true を返します。それ以外の場合は、false を返します。
at()も参照してください 。
[protected] QSqlError QSqlResult::lastError() const
結果に関連付けられた最後のエラーを返します。
setLastError()も参照してください 。
[virtual protected] QVariant QSqlResult::lastInsertId() const
データベースが対応している場合、最後に挿入された行のオブジェクトIDを返します。クエリによって値が挿入されなかった場合、またはデータベースがIDを返さない場合は、無効なQVariant が返されます。挿入によって複数の行が影響を受けた場合、動作は未定義となります。
なお、Oracle データベースの場合は行の ROWID が返され、MySQL データベースの場合は行の自動インクリメントフィールドが返される点に注意してください。
QSqlDriver::hasFeature()も参照してください 。
[protected] QString QSqlResult::lastQuery() const
現在のSQLクエリのテキストを返します。クエリがない場合は、空の文字列を返します。
setQuery()も参照してください 。
[pure virtual protected] int QSqlResult::numRowsAffected()
最後に実行されたクエリによって影響を受けた行数を返します。算出できない場合や、クエリがSELECT 文である場合は-1を返します。
「size()」も参照してください 。
[virtual protected] bool QSqlResult::prepare(const QString &query)
指定されたquery を実行用に準備します。通常、このクエリは繰り返し実行できるようにプレースホルダーを使用します。クエリの準備に成功した場合はtrueを返し、失敗した場合はfalse を返します。
exec()も参照してください 。
[virtual protected] QSqlRecord QSqlResult::record() const
クエリがアクティブな場合は現在のレコードを返し、そうでない場合は空のQSqlRecord を返します。
デフォルトの実装では、常に空のQSqlRecord を返します。
isActive()も参照してください 。
[pure virtual protected] bool QSqlResult::reset(const QString &query)
結果に対して、以降のデータ取得に SQL ステートメント `query ` を使用するように設定します。
派生クラスはこの関数を再実装し、query をデータベースに適用する必要があります。この関数は、結果が非アクティブ状態に設定され、新しい結果の最初のレコードの前に位置付けられた後にのみ呼び出されます。派生クラスは、クエリが成功し、使用可能な状態であれば true を返し、そうでない場合は false を返す必要があります。
setQuery()も参照してください 。
[protected] void QSqlResult::resetBindCount()
バインドパラメータの数をリセットします。
[virtual protected] bool QSqlResult::savePrepare(const QString &query)
指定されたquery を、可能な場合は基盤となるデータベース機能を使用して準備します。クエリの準備が正常に完了した場合はtrue を返し、そうでない場合はfalse を返します。
注: このメソッドは「safePrepare()」という名前であるべきでした。
prepare()も参照してください 。
[virtual protected] void QSqlResult::setActive(bool active)
この関数は、派生クラスが内部のアクティブ状態をactive に設定するために用意されています。
isActive()も参照してください 。
[virtual protected] void QSqlResult::setAt(int index)
この関数は、派生クラスが内部の(0を起点とする)行位置を `index` に設定するために提供されています。
at()も参照してください 。
[virtual protected] void QSqlResult::setForwardOnly(bool forward)
「フォワードオンリーモード」をforward に設定します。forward がtrueの場合、結果セットのナビゲーションにはfetchNext()のみが許可されます。フォワードオンリーモードでは、結果セットをキャッシュする必要がないため、必要なメモリ量が大幅に少なくなります。デフォルトでは、この機能は無効になっています。
forwardOnlyをfalseに設定することは、データベースエンジンへの推奨事項に過ぎず、結果セットが「前方のみ」か「スクロール可能」かについては、最終的にデータベースエンジンが決定します。isForwardOnly()は常に結果セットの正しいステータスを返します。
注: クエリの実行後に setForwardOnlyを呼び出すと 、良くて予期しない結果となり、最悪の場合はクラッシュします。
注: フォワードオンリーのクエリが正常に完了したことを確認するため 、アプリケーションはクエリの実行後だけでなく、クエリ結果のナビゲーション後もlastError() を呼び出してエラーの有無を確認する必要があります。
警告: PostgreSQL : フォワードオンリーモードでクエリ結果をナビゲートしている間は、同じデータベース接続上で他の SQL コマンドを実行しないでください。これにより、クエリ結果が失われることになります。
関連項目: isForwardOnly()、fetchNext()、およびQSqlQuery::setForwardOnly()。
[virtual protected] void QSqlResult::setLastError(const QSqlError &error)
この関数は、派生クラスが最後のエラーを `error` に設定するために提供されています。
lastError()も参照してください 。
[virtual protected] void QSqlResult::setQuery(const QString &query)
結果の現在のクエリを `query` に設定します。データベース上でクエリを実行するには、reset() を呼び出す必要があります。
reset() およびlastQuery()も参照してください 。
[virtual protected] void QSqlResult::setSelect(bool select)
この関数は、派生クラスが現在のステートメントが SQL の `SELECT ` ステートメントであるかどうかを示すために提供されています。ステートメントが `SELECT ` ステートメントである場合は、select パラメータを `true` に設定し、そうでない場合は `false` に設定する必要があります。
isSelect()も参照してください 。
[pure virtual protected] int QSqlResult::size()
SELECT の結果のサイズを返します。サイズを特定できない場合、またはクエリがSELECT 文でない場合は-1を返します。
numRowsAffected()も参照してください 。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.