このページでは

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()
(since 6.9) QString connectionName() const
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ドライバがバイナリ大型オブジェクト (BLOB) フィールドをサポートしているかどうか。
QSqlDriver::Unicode3データベースサーバーが Unicode 文字列をサポートしている場合、ドライバも Unicode 文字列をサポートしているかどうか。
QSqlDriver::PreparedQueries4ドライバがプリペアードクエリの実行をサポートしているかどうか。
QSqlDriver::NamedPlaceholders5ドライバが名前付きプレースホルダーの使用をサポートしているかどうか。
QSqlDriver::PositionalPlaceholders6ドライバが位置指定プレースホルダーの使用をサポートしているかどうか。
QSqlDriver::LastInsertId7ドライバが、最後に操作した行の ID を返す機能をサポートしているかどうか。
QSqlDriver::BatchOperations8ドライバがバッチ処理をサポートしているかどうか。QSqlQuery::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::UpdateStatement2SQLのUPDATE 文(例:UPDATE TABLE t set f = 1 )。
QSqlDriver::InsertStatement3SQLのINSERT 文(例:INSERT INTO t (f) values (1) )。
QSqlDriver::DeleteStatement4SQL の `DELETE ` ステートメント(例:DELETE FROM t )。

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

プロパティのドキュメント

[since 6.8] numericalPrecisionPolicy : QSql::NumericalPrecisionPolicy

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

注: 精度ポリシーの設定は 、現在実行中のクエリには影響しません。

この列挙型は Qt 6.8 で導入されました。

アクセス関数:

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

関連項目: QSql::NumericalPrecisionPolicy 、QSqlQuery::numericalPrecisionPolicy 、およびQSqlDatabase::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()も参照してください 。

[since 6.9] QString QSqlDriver::connectionName() const

QSqlDatabase::addDatabase() によって作成されたドライバのデータベース接続名を返します

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

[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 が文字データの場合、値は単一引用符で囲まれて返されます。これは多くのSQLデータベースに適した形式です。埋め込まれた単一引用符はエスケープされます(2つの単一引用符に置き換えられます)。trimStrings がtrueの場合(デフォルトはfalse)、フィールドの末尾の空白はすべて削除されます。
  • field が日付/時刻データの場合、値はISO形式でフォーマットされ、一重引用符で囲まれます。日付/時刻データが無効な場合は、「NULL」が返されます。
  • field がbytearray データであり、かつドライバがバイナリフィールドを編集できる場合、その値は16進数文字列としてフォーマットされます。
  • その他のフィールド型の場合、その値に対して toString() が呼び出され、その結果が返されます。

QVariant::toString()も参照してください 。

[virtual] QVariant QSqlDriver::handle() const

QVariant でラップされた低レベルのデータベースハンドルを返します。ハンドルが存在しない場合は、無効なバリアントを返します。

警告: この関数は、その動作を十分に理解している場合にのみ、細心の注意を払って使用してください 。

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

警告: 接続がまだ開かれていない場合、ハンドルは 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())

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

この関数は、成功した場合は 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)

numericalPrecisionPolicy をprecisionPolicy に設定します。

注: プロパティ `numericalPrecisionPolicy`のセッター 関数です。

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

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

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

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

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

この関数は、データベースのオープン状態をerror に設定します。派生クラスはこの関数を使用して、open()のステータスを報告することができます。なお、error がtrueの場合、データベースのオープン状態はclosedに設定されます(つまり、isOpen()はfalse を返します)。

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

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

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

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()も参照してください 。

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