QSqlDriver Class

QSqlDriver クラスは、特定の SQL データベースにアクセスするための抽象基底クラスです。詳細...

ヘッダ #include <QSqlDriver>
CMake: find_package(Qt6 REQUIRED COMPONENTS Sql)
target_link_libraries(mytarget PRIVATE Qt6::Sql)
qmake: QT += sql
継承: QObject

パブリックタイプ

enum DriverFeature { Transactions, QuerySize, BLOB, Unicode, PreparedQueries, …, CancelQuery }
enum IdentifierType { FieldName, TableName }
enum NotificationSource { UnknownSource, SelfSource, OtherSource }
enum StatementType { WhereStatement, SelectStatement, UpdateStatement, InsertStatement, DeleteStatement }

プロパティ

パブリック機能

QSqlDriver(QObject *parent = nullptr)
virtual ~QSqlDriver()
virtual bool beginTransaction()
virtual void close() = 0
virtual bool commitTransaction()
virtual QSqlResult *createResult() const = 0
virtual QString escapeIdentifier(const QString &identifier, QSqlDriver::IdentifierType type) const
virtual QString formatValue(const QSqlField &field, bool trimStrings = false) const
virtual QVariant handle() const
virtual bool hasFeature(QSqlDriver::DriverFeature feature) const = 0
virtual bool isIdentifierEscaped(const QString &identifier, QSqlDriver::IdentifierType type) const
virtual bool isOpen() const
bool isOpenError() const
QSqlError lastError() const
(since 6.0) virtual int maximumIdentifierLength(QSqlDriver::IdentifierType type) const
QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const
virtual bool open(const QString &db, const QString &user = QString(), const QString &password = QString(), const QString &host = QString(), int port = -1, const QString &options = QString()) = 0
virtual QSqlIndex primaryIndex(const QString &tableName) const
virtual QSqlRecord record(const QString &tableName) const
virtual bool rollbackTransaction()
void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)
virtual QString sqlStatement(QSqlDriver::StatementType type, const QString &tableName, const QSqlRecord &rec, bool preparedStatement) const
virtual QString stripDelimiters(const QString &identifier, QSqlDriver::IdentifierType type) const
virtual bool subscribeToNotification(const QString &name)
virtual QStringList subscribedToNotifications() const
virtual QStringList tables(QSql::TableType tableType) const
virtual bool unsubscribeFromNotification(const QString &name)

シグナル

void notification(const QString &name, QSqlDriver::NotificationSource source, const QVariant &payload)

保護された関数

virtual void setLastError(const QSqlError &error)
virtual void setOpen(bool open)
virtual void setOpenError(bool error)

詳細説明

このクラスは直接使用しないでください。代わりにQSqlDatabase を使用してください。

独自のSQLドライバを作成したい場合は、このクラスをサブクラス化し、純粋仮想関数と必要な仮想関数を再実装することができます。詳しくは、独自のデータベース・ドライバを書く方法を参照してください。

QSqlDatabase およびQSqlResultも参照して ください。

メンバ型ドキュメント

enum QSqlDriver::DriverFeature

この列挙型には、ドライバがサポートする可能性のある機能のリストが含まれる。ある機能がサポートされているかどうかを調べるには、hasFeature() を使用する。一部の機能はデータベース・サーバに依存するため、QSqlDatabase::open() でデータベース接続が正常にオープンされた後でないと正しく判断できません。

定数説明
QSqlDriver::Transactions0ドライバが SQL トランザクションをサポートしているかどうか。
QSqlDriver::QuerySize1データベースがクエリのサイズを報告できるかどうか。QSqlQuery::size() は -1 を返します。
QSqlDriver::BLOB2ドライバが Binary Large Object フィールドをサポートしているかどうか。
QSqlDriver::Unicode3データベース・サーバがUnicode文字列をサポートしている場合、ドライバがUnicode文字列をサポートしているかどうか。
QSqlDriver::PreparedQueries4ドライバがプリペアド・クエリの実行をサポートしているかどうか。
QSqlDriver::NamedPlaceholders5ドライバが名前付きプレースホルダの使用をサポートしているかどうか。
QSqlDriver::PositionalPlaceholders6ドライバが位置指定プレースホルダの使用をサポートしているかどうか。
QSqlDriver::LastInsertId7ドライバが最後にタッチされた行の ID を返すことをサポートしているかどうか。
QSqlDriver::BatchOperations8QSqlQuery::execBatch() を参照。
QSqlDriver::SimpleLocking9他のクエリがテーブルを読み取りロックしている時に、ドライバがそのテーブルの書き込みロックを禁止するかどうか。
QSqlDriver::LowPrecisionNumbers10ドライバが精度の低い数値のフェッチを許可するかどうか。
QSqlDriver::EventNotifications11ドライバがデータベースイベント通知をサポートしているかどうか。
QSqlDriver::FinishQuery12QSqlQuery::finish() が呼ばれたときに、ドライバが低レベルのリソースのクリーンアップを行えるかどうか。
QSqlDriver::MultipleResultSets13ドライバが、バッチ化された文やストアドプロシージャから返された複数の結果セットにアクセスできるかどうか。
QSqlDriver::CancelQuery14ドライバが実行中のクエリをキャンセルできるかどうか。

サポートされる機能の詳細については、Qt SQL ドライバのドキュメントを参照してください。

hasFeature()も参照してください

enum QSqlDriver::IdentifierType

この列挙型はSQL識別子の型のリストを含んでいます。

定数説明
QSqlDriver::FieldName0SQLフィールド名
QSqlDriver::TableName1SQL テーブル名

enum QSqlDriver::NotificationSource

この列挙型は SQL 通知ソースのリストを含んでいます。

定数説明
QSqlDriver::UnknownSource0通知元が不明
QSqlDriver::SelfSource1通知ソースはこの接続です
QSqlDriver::OtherSource2通知元が別の接続

enum QSqlDriver::StatementType

この列挙型には、ドライバが作成できる SQL 文(または句)の型のリストが含まれています。

定数説明
QSqlDriver::WhereStatement0SQLWHERE 文 (例えば、WHERE f = 5).
QSqlDriver::SelectStatement1SQLSELECT 文 (SELECT f FROM t など)。
QSqlDriver::UpdateStatement2SQLUPDATE 文 (UPDATE TABLE t set f = 1 など)。
QSqlDriver::InsertStatement3SQLINSERT 文(例えば、INSERT INTO t (f) values (1) )。
QSqlDriver::DeleteStatement4SQLDELETE 文 (例:DELETE FROM t).

sqlStatement()も参照してください

プロパティ・ドキュメンテーション

[since 6.8] numericalPrecisionPolicy : QSql::NumericalPrecisionPolicy

このプロパティは、データベース接続の精度ポリシーを保持します。

注意: 精度ポリシーを設定しても、現在アクティブなクエリには影響しません。

このプロパティは Qt 6.8 で導入されました。

関数にアクセスします:

QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const
void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)

QSql::NumericalPrecisionPolicyQSqlQuery::numericalPrecisionPolicyQSqlDatabase::numericalPrecisionPolicyも参照してください

メンバ関数のドキュメント

[explicit] QSqlDriver::QSqlDriver(QObject *parent = nullptr)

与えられたparent で新しいドライバを構築する。

[virtual noexcept] QSqlDriver::~QSqlDriver()

オブジェクトを破棄し、割り当てられたリソースを解放する。

[virtual] bool QSqlDriver::beginTransaction()

この関数はトランザクションを開始するために呼ばれる。成功すればtrueを返し、そうでなければfalseを返す。デフォルトの実装では何もせず、false を返す。

commitTransaction() およびrollbackTransaction()も参照のこと

[pure virtual] void QSqlDriver::close()

派生クラスがデータベース接続を閉じるには、この純粋仮想関数を再実装する必要があります。成功した場合は true を返し、失敗した場合は false を返します。

open() およびsetOpen()も参照してください

[virtual] bool QSqlDriver::commitTransaction()

この関数はトランザクションをコミットするために呼び出される。成功すればtrueを返し、そうでなければfalseを返す。デフォルトの実装では何もせず、false を返す。

beginTransaction() およびrollbackTransaction()も参照

[pure virtual] QSqlResult *QSqlDriver::createResult() const

データベース上に空の SQL 結果を作成します。派生クラスはこの関数を再実装し、そのデータベースに適したQSqlResult オブジェクトを呼び出し元に返さなければなりません。

[virtual] QString QSqlDriver::escapeIdentifier(const QString &identifier, QSqlDriver::IdentifierType type) const

データベースのルールに従ってエスケープされたidentifier を返します。identifier はテーブル名かフィールド名で、type に依存します。

デフォルトの実装は何もしません。

isIdentifierEscaped()も参照してください

[virtual] QString QSqlDriver::formatValue(const QSqlField &field, bool trimStrings = false) const

データベースのfield 値を文字列で返します。これは、例えばINSERT文やUPDATE文を作成する際に使用されます。

デフォルトの実装では、以下の規則に従って文字列としてフォーマットされた値を返します:

  • field が文字データである場合、値は単一引用符で囲まれて返されます。埋め込まれたシングル・クオート文字はエスケープされます(2つのシングル・クオート文字に置き換えられます)。trimStrings がtrueの場合(デフォルトはfalse)、フィールドの末尾の空白はすべて取り除かれます。
  • field が日付/時刻データの場合、値は ISO フォーマットでフォーマットされ、シングルクォーテーションで囲まれます。日付/時刻データが無効な場合、"NULL "が返される。
  • fieldbytearray データで、ドライバがバイナリ・フィールドを編集できる場合、値は 16 進文字列としてフォーマットされる。
  • その他のフィールド・タイプでは、その値に対してtoString()が呼び出され、その結果が返される。

QVariant::toString()も参照のこと

[virtual] QVariant QSqlDriver::handle() const

QVariant でラップされた低レベルデータベースハンドルか、ハンドルがない場合は無効な variant を返します。

警告: 何をやっているかわかっている場合のみ、細心の注意を払って使用してください。

警告 ここで返されるハンドルは、接続が変更された場合(例えば、接続を閉じた場合)、古いポインタになる可能性があります。

警告 接続がまだオープンされていない場合、ハンドルは NULL になる可能性があります。

ここで返されるハンドルはデータベースに依存しているので、 アクセスする前にバリアントの型名を問い合わせる必要があります。

この例は sqlite への接続のハンドルを取得します:

QSqlDatabase db = QSqlDatabase::database();
QVariant v = db.driver()->handle();
if (v.isValid() && (qstrcmp(v.typeName(), "sqlite3*") == 0)) {
    // v.data() returns a pointer to the handle
    sqlite3 *handle = *static_cast<sqlite3 **>(v.data());
    if (handle) {
        // ...
    }
}

このスニペットは PostgreSQL または MySQL のハンドルを返します:

if (qstrcmp(v.typeName(), "PGconn*") == 0) {
    PGconn *handle = *static_cast<PGconn **>(v.data());
    if (handle) {
        // ...
    }
}

if (qstrcmp(v.typeName(), "MYSQL*") == 0) {
    MYSQL *handle = *static_cast<MYSQL **>(v.data());
    if (handle) {
        // ...
    }
}

QSqlResult::handle()も参照してください

[pure virtual] bool QSqlDriver::hasFeature(QSqlDriver::DriverFeature feature) const

ドライバが機能feature をサポートしている場合はtrue を返し、そうでない場合はfalse を返す。

データベースによっては、open() でないと判定できないものもあることに注意。

DriverFeatureも参照のこと

[virtual] bool QSqlDriver::isIdentifierEscaped(const QString &identifier, QSqlDriver::IdentifierType type) const

identifier がデータベースのルールに従ってエスケープされているかどうかを返します。identifier はテーブル名かフィールド名で、type に依存します。

QSqlDriver のサブクラスで独自の実装を提供したい場合は、この関数を再実装してください、

stripDelimiters() およびescapeIdentifier()も参照して ください。

[virtual] bool QSqlDriver::isOpen() const

データベース接続がオープンされていればtrue を返し、そうでなければ false を返します。

bool QSqlDriver::isOpenError() const

データベース接続のオープンにエラーがあった場合はtrue を返し、そうでない場合はfalse を返す。

QSqlError QSqlDriver::lastError() const

データベースで最後に発生したエラーに関する情報を含むQSqlError オブジェクトを返します。

setLastError()も参照

[virtual, since 6.0] int QSqlDriver::maximumIdentifierLength(QSqlDriver::IdentifierType type) const

データベースの設定に従い、識別子type の最大長を返します。データベースの最大長がない場合、デフォルトで INT_MAX を返します。

この関数は Qt 6.0 で導入されました。

[signal] void QSqlDriver::notification(const QString &name, QSqlDriver::NotificationSource source, const QVariant &payload)

このシグナルは、データベースがドライバがサブスクライブするイベント通知をポストしたときに発行されます。name はイベント通知を識別し、source はシグナルソースを示し、payload はオプションで通知とともに配信される追加データを保持します。

subscribeToNotification()も参照してください

QSql::NumericalPrecisionPolicy QSqlDriver::numericalPrecisionPolicy() const

numericalPrecisionPolicyを返します。

注: プロパティ numericalPrecisionPolicy のゲッター関数。

setNumericalPrecisionPolicy()も参照してください

[pure virtual] bool QSqlDriver::open(const QString &db, const QString &user = QString(), const QString &password = QString(), const QString &host = QString(), int port = -1, const QString &options = QString())

派生クラスは、ユーザー名user 、パスワードpassword 、ホストhost 、ポートport 、接続オプションoptions を使用して、データベースdb でデータベース接続を開くために、この純粋な仮想関数を再実装する必要があります。

この関数は、成功した場合はtrueを返し、失敗した場合はfalseを返さなければなりません。

setOpen()も参照してください

[virtual] QSqlIndex QSqlDriver::primaryIndex(const QString &tableName) const

テーブルtableName のプライマリ・インデックスを返します。テーブルに主インデックスがない場合は空のQSqlIndex を返します。デフォルトの実装は空のインデックスを返します。

[virtual] QSqlRecord QSqlDriver::record(const QString &tableName) const

tableName テーブルのフィールド名をQSqlRecord に返す。そのようなテーブルが存在しない場合は、空のレコードが返されます。デフォルトの実装は空のレコードを返します。

[virtual] bool QSqlDriver::rollbackTransaction()

この関数は、トランザクションをロールバックするために呼び出される。成功すればtrueを返し、そうでなければfalseを返す。デフォルトの実装では何もせず、false を返す。

beginTransaction() およびcommitTransaction()も参照

[virtual protected] void QSqlDriver::setLastError(const QSqlError &error)

この関数は、データベースで発生した最後のエラーerror の値を設定するために使用される。

lastError()も参照のこと

void QSqlDriver::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)

numericalPrecisionPolicyprecisionPolicy に設定する。

注: プロパティnumericalPrecisionPolicy に対するセッター関数。

numericalPrecisionPolicy()も参照してください

[virtual protected] void QSqlDriver::setOpen(bool open)

この関数は、データベースのオープン状態をopen に設定します。派生クラスは、この関数を使用してopen() の状態を報告できます。

open() およびsetOpenError()も参照してください

[virtual protected] void QSqlDriver::setOpenError(bool error)

この関数は、データベースのオープン・エラー状態をerror に設定します。派生クラスはこの関数を使用して、open() の状態を報告できます。error が真の場合、データベースのオープン状態はクローズに設定されることに注意してください (つまり、isOpen() はfalse を返します)。

isOpenError()、open()、setOpen()も参照して ください。

[virtual] QString QSqlDriver::sqlStatement(QSqlDriver::StatementType type, const QString &tableName, const QSqlRecord &rec, bool preparedStatement) const

テーブルtableName に対して、rec の値を含むtype 型の SQL 文を返します。preparedStatement が真の場合、文字列には値の代わりにプレースホルダが含まれます。

rec の各フィールドの生成フラグによって、生成される文にフィールドが含まれるかどうかが決まります。

このメソッドは、データベース依存のSQL方言を気にすることなくテーブルを操作するために使用できます。準備されていない文では、値は適切にエスケープされます。

WHERE文では、rec の各NULLでないフィールドは、フィールド値と等しいというフィルタ条件を指定し、準備されている場合はプレースホルダを指定します。しかし、準備されているかどうかにかかわらず、NULLフィールドはIS NULLという条件を指定し、プレースホルダを導入することはありません。アプリケーションは、実行中にNULLフィールドにデータをバインドしてはならない。プレースホルダが必要な場合は、フィールドにNULLでない値を設定しなければなりません。さらに、非NULLフィールドは等号条件を指定し、SQLのNULLはそれ自身であっても何にも等しくないため、一般的にNULLをプレースホルダにバインドすることは有用ではありません。

[virtual] QString QSqlDriver::stripDelimiters(const QString &identifier, QSqlDriver::IdentifierType type) const

先頭と末尾の区切り文字を削除したidentifier を返す。identifier は、type に依存して、テーブル名またはフィールド名のいずれかになる。identifier に先頭および末尾の区切り文字がない場合は、identifier がそのまま返される。

QSqlDriver のサブクラスで独自の実装を提供したい場合は、この関数を再実装してください、

isIdentifierEscaped()も参照のこと

[virtual] bool QSqlDriver::subscribeToNotification(const QString &name)

この関数は、データベースからのイベント通知を購読するために呼び出される。name イベント通知を識別する。

成功した場合は true を返し、失敗した場合は false を返します。

この関数が呼び出されるとき、データベースは開いていなければなりません。close() を呼び出してデータベースをクローズすると、サブスクライブされていたすべてのイベント通知は自動的にアンサブスクライブされます。すでに開いているデータベースでopen() を呼び出すと、暗黙的にclose() が呼び出され、ドライバがすべてのイベント通知の購読を解除してしまう可能性があることに注意。

name で識別されるイベント通知がデータベースによってポストされると、notification() シグナルが発行されます。

独自のQSqlDriver サブクラスでイベント通知サポートを提供したい場合は、この関数を再実装してください、

unsubscribeFromNotification(),subscribedToNotifications(),QSqlDriver::hasFeature()も参照してください

[virtual] QStringList QSqlDriver::subscribedToNotifications() const

現在購読しているイベント通知の名前のリストを返す。

独自のQSqlDriver サブクラスでイベント通知のサポートを提供したい場合は、この関数を再実装してください、

subscribeToNotification() およびunsubscribeFromNotification()も参照して ください。

[virtual] QStringList QSqlDriver::tables(QSql::TableType tableType) const

データベース内のテーブル名のリストを返します。デフォルトの実装は空のリストを返します。

tableType 引数には、返すべきテーブルのタイプを記述します。バイナリ互換性のため、文字列にはQSql::TableTypes列挙型の値がテキストとして含まれます。空文字列は後方互換性のためにQSql::Tables として扱われるべきです。

[virtual] bool QSqlDriver::unsubscribeFromNotification(const QString &name)

この関数は、データベースからのイベント通知の購読を解除するために呼び出される。name イベント通知を識別する。

成功した場合は true を返し、失敗した場合は false を返します。

この関数が呼び出されるとき、データベースはオープンされていなければなりません。close() 関数が呼び出されると、すべてのサブスクライブされたイベント通知は自動的にアンサブスクライブされます。

この関数を呼び出すと、name によって識別されたイベント通知がデータベースによってポストされたときに、notification() シグナルが発行されなくなります。

独自のQSqlDriver サブクラスでイベント通知サポートを提供したい場合は、この関数を再実装してください、

subscribeToNotification() およびsubscribedToNotifications()も参照してください

© 2025 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.