QSqlDriver Class

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

Header: #include <QSqlDriver>
CMake: find_package(Qt6 REQUIRED COMPONENTS Sql)
target_link_libraries(mytarget PRIVATE Qt6::Sql)
qmake: QT += sql
Inherits: 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()も参照してください

プロパティ Documentation

[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 に包まれた低レベル・データベース・ハンドル、またはハンドルがない場合は無効なバリアントを返します。

警告: これは、自分が何をしているのかわかっている場合にのみ、細心の注意を払って使用してください。

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

警告 接続がまだオープンされていない場合、ハンドルは 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

rec の値を持つテーブルtableName に対して、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()も参照してください

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。