QSqlDatabase Class
QSqlDatabase クラスはデータベースへの接続を処理します。詳細...
Header: | #include <QSqlDatabase> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Sql) target_link_libraries(mytarget PRIVATE Qt6::Sql) |
qmake: | QT += sql |
- 継承メンバを含む全メンバのリスト
- 非推奨メンバ
- QSqlDatabase はデータベースクラスの一部です。
プロパティ
(since 6.8)
numericalPrecisionPolicy : QSql::NumericalPrecisionPolicy
パブリック関数
QSqlDatabase() | |
QSqlDatabase(const QSqlDatabase &other) | |
~QSqlDatabase() | |
void | close() |
bool | commit() |
QString | connectOptions() const |
QString | connectionName() const |
QString | databaseName() const |
QSqlDriver * | driver() const |
QString | driverName() const |
QString | hostName() const |
bool | isOpen() const |
bool | isOpenError() const |
bool | isValid() const |
QSqlError | lastError() const |
(since 6.8) bool | moveToThread(QThread *targetThread) |
QSql::NumericalPrecisionPolicy | numericalPrecisionPolicy() const |
bool | open() |
bool | open(const QString &user, const QString &password) |
QString | password() const |
int | port() const |
QSqlIndex | primaryIndex(const QString &tablename) const |
QSqlRecord | record(const QString &tablename) const |
bool | rollback() |
void | setConnectOptions(const QString &options = QString()) |
void | setDatabaseName(const QString &name) |
void | setHostName(const QString &host) |
void | setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy) |
void | setPassword(const QString &password) |
void | setPort(int port) |
void | setUserName(const QString &name) |
QStringList | tables(QSql::TableType type = QSql::Tables) const |
(since 6.8) QThread * | thread() const |
bool | transaction() |
QString | userName() const |
QSqlDatabase & | operator=(const QSqlDatabase &other) |
静的パブリックメンバ
QSqlDatabase | addDatabase(const QString &type, const QString &connectionName = QLatin1StringView(defaultConnection)) |
QSqlDatabase | addDatabase(QSqlDriver *driver, const QString &connectionName = QLatin1StringView(defaultConnection)) |
QSqlDatabase | cloneDatabase(const QSqlDatabase &other, const QString &connectionName) |
QSqlDatabase | cloneDatabase(const QString &other, const QString &connectionName) |
QStringList | connectionNames() |
bool | contains(const QString &connectionName = QLatin1StringView(defaultConnection)) |
QSqlDatabase | database(const QString &connectionName = QLatin1StringView(defaultConnection), bool open = true) |
QStringList | drivers() |
bool | isDriverAvailable(const QString &name) |
void | registerSqlDriver(const QString &name, QSqlDriverCreatorBase *creator) |
void | removeDatabase(const QString &connectionName) |
プロテクト関数
QSqlDatabase(QSqlDriver *driver) | |
QSqlDatabase(const QString &type) |
詳細説明
QSqlDatabase クラスは、接続を介してデータベースにアクセスするためのインターフェイスを提供します。QSqlDatabase のインスタンスは接続を表します。接続は、QSqlDriver から派生した、サポートされているデータベース・ドライバのいずれかを介してデータベースへのアクセスを提供します。また、QSqlDriver から独自のデータベース・ドライバをサブクラス化することもできます。詳細は、「独自のデータベース・ドライバを記述する方法」を参照してください。QSqlDatabase インスタンスは、それが作成されたスレッドからのみアクセスする必要があります。したがって、正しいコンテキストで作成する必要があります。または、QSqlDatabase::moveToThread() でコンテキストを変更することもできます。
静的なaddDatabase() 関数のいずれかを呼び出して接続 (つまり QSqlDatabase のインスタンス) を作成します。ここで、使用するドライバまたはドライバのタイプ(データベースのタイプによる) と接続名を指定します。接続は、接続先のデータベース名ではなく、その接続名で識別されます。1つのデータベースに対して複数の接続を持つことができます。QSqlDatabase はデフォルト接続(無名接続)の概念もサポートしています。デフォルト接続を作成するには、addDatabase() を呼び出す際に接続名の引数を渡さないでください。その後、接続名を指定せずに静的メンバ関数を呼び出すと、デフォルト接続が想定されます。以下のスニペットは、PostgreSQL データベースへのデフォルト接続を作成して開く方法を示しています:
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL"); db.setHostName("acidalia"); db.setDatabaseName("customdb"); db.setUserName("mojito"); db.setPassword("J0a1m8"); bool ok = db.open();
QSqlDatabase オブジェクトを作成したら、setDatabaseName()、setUserName()、setPassword()、setHostName()、setPort()、setConnectOptions() で接続パラメータを設定します。次にopen() を呼び出して、データベースへの物理接続を有効にします。接続は、開くまで使用できません。
addDatabase() に接続名を指定しなかったため、上記で定義した接続がデフォルトの接続となります。その後、接続名の引数を指定せずにdatabase() を呼び出すことで、デフォルトの接続を取得できます:
QSqlDatabase db = QSqlDatabase::database();
QSqlDatabase は値クラスです。QSqlDatabase は値クラスです。QSqlDatabase の 1 つのインスタンスを介してデータベース接続に加えられた変更は、同じ接続を表す QSqlDatabase の他のインスタンスにも影響します。既存のデータベース接続を基に独立したデータベース接続を作成するにはcloneDatabase() を使用してください。
警告: これは、シャットダウン時にインスタンスが正しくクリーンアップされないためです。既存の QSqlDatabase にアクセスする必要がある場合は、database() を使用してアクセスする必要があります。QSqlDatabase メンバ変数を選択した場合、QCoreApplication インスタンスが削除される前にこれを削除する必要があります。そうしないと、未定義の動作につながる可能性があります。
複数のデータベース接続を作成する場合は、addDatabase() を呼び出すときに、それぞれに一意の接続名を指定します。その接続を取得するには、接続名を指定してdatabase() を使用します。接続を削除するには、接続名を指定してremoveDatabase() を使用します。QSqlDatabase は、他の QSqlDatabase オブジェクトによって参照されている接続を削除しようとすると警告を出力します。contains() を使用して、指定された接続名が接続リストにあるかどうかを確認します。
いくつかのユーティリティメソッド: | |
---|---|
tables() | テーブルのリストを返す |
primaryIndex() | テーブルの主インデックスを返します。 |
record() | テーブルのフィールドについてのメタ情報を返す |
transaction() | トランザクションを開始する |
commit() | トランザクションの保存と完了 |
rollback() | トランザクションをキャンセルする |
hasFeature() | ドライバがトランザクションをサポートしているかチェックする |
lastError() | 直近のエラーに関する情報を返す |
drivers() | 使用可能な SQL ドライバの名前を返します |
isDriverAvailable() | 特定のドライバが使用可能かどうかを調べます |
registerSqlDriver() | カスタムメイドのドライバを登録する |
注意: トランザクションを使用する場合は、クエリを作成する前にトランザクションを開始する必要があります。
QSqlDriver,QSqlQuery,Qt SQL,Threads and the SQL Moduleも参照してください 。
プロパティ・ドキュメンテーション
[since 6.8]
numericalPrecisionPolicy : QSql::NumericalPrecisionPolicy
このプロパティは、このデータベース接続で作成されるクエリで使用されるデフォルトの数値精度ポリシーを保持します。
注意: 精度の低い数値のフェッチをサポートしないドライバは、精度ポリシーを無視します。QSqlDriver::hasFeature() を使用して、ドライバがこの機能をサポートしているかどうかを調べることができます。
注意: デフォルトの精度ポリシーをprecisionPolicy に設定しても、現在アクティブなクエリには影響しません。
このプロパティは Qt 6.8 で導入されました。
アクセス関数:
QSql::NumericalPrecisionPolicy | numericalPrecisionPolicy() const |
void | setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy) |
QSql::NumericalPrecisionPolicy 、QSqlQuery::numericalPrecisionPolicy 、QSqlDriver::numericalPrecisionPolicyも参照してください 。
メンバ関数 ドキュメント
QSqlDatabase::QSqlDatabase()
空の無効な QSqlDatabase オブジェクトを作成します。有効な QSqlDatabase オブジェクトを取得するには、addDatabase()、removeDatabase()、およびdatabase() を使用してください。
[explicit protected]
QSqlDatabase::QSqlDatabase(QSqlDriver *driver)
これはオーバーロードされた関数です。
指定されたdriver を使用してデータベース接続を作成します。
[explicit protected]
QSqlDatabase::QSqlDatabase(const QString &type)
これはオーバーロードされた関数です。
type によって参照されるドライバを使用する QSqlDatabase 接続を作成します。type が認識されない場合、データベース接続は機能を持ちません。
現在利用可能なドライバ・タイプは以下のとおりです:
ドライバの種類 | 説明 |
---|---|
QDB2 | IBM DB2 |
QIBASE | ボーランドInterBaseドライバ |
QMYSQL | MySQL ドライバ |
QOCI | オラクルコールインターフェイスドライバ |
QODBC | ODBCドライバ(Microsoft SQL Serverを含む) |
QPSQL | PostgreSQLドライバ |
QSQLITE | SQLite バージョン 3 以上 |
QMIMER | Mimer SQL 11 以上 |
独自のカスタムドライバを含む、追加のサードパーティドライバを動的にロードすることができます。
SQL データベースドライバ、registerSqlDriver()、drivers()も参照して ください。
QSqlDatabase::QSqlDatabase(const QSqlDatabase &other)
other のコピーを作成します。
[noexcept]
QSqlDatabase::~QSqlDatabase()
オブジェクトを破棄し、割り当てられたリソースを解放します。
注意: 最後の接続が破棄されると、デストラクタは暗黙的にclose() を呼び出してデータベース接続を解放します。
close()も参照してください 。
[static]
QSqlDatabase QSqlDatabase::addDatabase(const QString &type, const QString &connectionName = QLatin1StringView(defaultConnection))
type ドライバと接続名connectionName を使用して、データベース接続のリストにデータベースを追加します。connectionName というデータベース接続が既に存在する場合、その接続は削除されます。
そのデータベース接続はconnectionName で参照されます。新しく追加されたデータベース接続が返されます。
type が利用できないか、ロードできなかった場合、isValid() はfalse
を返します。
connectionName が指定されていない場合、新しい接続がアプリケーションの既定接続になり、以 降、接続名の引数を指定せずにdatabase() を呼び出すと、既定接続が返されます。ここでconnectionName を指定した場合は、database(connectionName) を使用して接続を取得します。
警告: 既存の接続と同じ名前の接続を追加すると、新しい接続が古い接続を置き換えます。connectionName を指定せずにこの関数を複数回呼び出すと、デフォルトの接続が置き換えられます。
例えば、setDatabaseName()、setUserName()、setPassword()、setHostName()、setPort()、setConnectOptions() の一部またはすべてを呼び出し、最後にopen() を呼び出す。
注:この関数はスレッドセーフである。
database ()、removeDatabase ()、スレッドとSQLモジュールも参照してください 。
[static]
QSqlDatabase QSqlDatabase::addDatabase(QSqlDriver *driver, const QString &connectionName = QLatin1StringView(defaultConnection))
これはオーバーロードされた関数です。
このオーバーロードは、自分でインスタンス化したdriver でデータベース接続を作成したい場合に便利です。これは独自のデータベースドライバかもしれませんし、Qtドライバのインスタンスを作成する必要があるかもしれません。この場合、アプリケーションにドライバのコードを含めることをお勧めします。例えば、以下のように独自のQPSQLドライバを使用してPostgreSQL接続を作成することができます:
PGconn *con = PQconnectdb("host=server user=bart password=simpson dbname=springfield"); QPSQLDriver *drv = new QPSQLDriver(con); QSqlDatabase db = QSqlDatabase::addDatabase(drv); // becomes the new default connection QSqlQuery query; query.exec("SELECT NAME, ID FROM STAFF");
上記のコードでは、PostgreSQL 接続を設定し、QPSQLDriver オブジェクトをインスタンス化しています。次に、addDatabase() を呼び出して接続を既知の接続に追加し、Qt SQL クラスで使用できるようにします。ドライバが接続ハンドル(またはハンドルのセット)でインスタンス化されるとき、Qt はすでにデータベース接続をオープンしていると仮定します。
注意: ここでは、qtdir
を Qt がインストールされているディレクトリと仮定します。これは、PostgreSQLクライアントライブラリを使用し、QPSQLDriverオブジェクトをインスタンス化するために必要なコードを取り込むもので、インクルード検索パスのどこかにPostgreSQLヘッダがあると仮定しています。
データベースクライアントライブラリに対してアプリケーションをリンクする必要があることを忘れないでください。クライアント・ライブラリがリンカの検索パスにあることを確認し、.pro
ファイルに以下のような行を追加してください:
unix:LIBS += -lpq win32:LIBS += libpqdll.lib
説明した方法は、提供されているすべてのドライバーで動作します。説明した方法は、提供されたすべてのドライバーに対して機能します。唯一の違いは、ドライバーのコンストラクターの引数です。以下は、Qt に含まれているドライバ、ソースコードファイル、コンストラクタの引数の表です:
ドライバ | クラス名 | コンストラクタ引数 | インクルードするファイル |
---|---|---|---|
QPSQL | QPSQLDriver | PGconn *connection | qsql_psql.cpp |
QMYSQL | QMYSQLDriver | MYSQL *接続 | qsql_mysql.cpp |
QOCI | QOCIDriver | OCIEnv *環境、OCISvcCtx *サービスコンテキスト | qsql_oci.cpp |
QODBC | QODBCDriver | SQLHANDLE 環境、SQLHANDLE 接続 | qsql_odbc.cpp |
QDB2 | QDB2 | SQLHANDLE 環境、SQLHANDLE 接続 | qsql_db2.cpp |
QSQLITE | QSQLiteDriver | sqlite *接続 | qsql_sqlite.cpp |
QMIMER | QMimerSQLDriver | MimerSession *connection | qsql_mimer.cpp |
QIBASE | QIBaseDriver | isc_db_handle connection | qsql_ibase.cpp |
警告 既存の接続と同じ接続名を持つデータベース接続を追加すると、既存の接続が新しい接続に置き換えられます。
警告 SQL フレームワークはdriver の所有権を持ちます。接続を削除するには、removeDatabase() を使用します。
drivers()も参照してください 。
[static]
QSqlDatabase QSqlDatabase::cloneDatabase(const QSqlDatabase &other, const QString &connectionName)
データベース接続other をクローンし、connectionName として格納します。元のデータベースからのすべての設定、例えばdatabaseName()、hostName() などがコピーされます。other が無効なデータベースである場合は何も行いません。新しく作成されたデータベース接続を返します。
注意: 新しい接続はまだオープンされていません。新しい接続を使用する前に、open() を呼び出す必要があります。
注釈この関数はリエントラントです。
[static]
QSqlDatabase QSqlDatabase::cloneDatabase(const QString &other, const QString &connectionName)
これはオーバーロードされた関数です。
データベース接続other をクローンし、connectionName として格納します。元のデータベースからのすべての設定、例えばdatabaseName()、hostName() などがコピーされます。other が無効なデータベースである場合は何も行いません。新しく作成されたデータベース接続を返します。
注意: 新しい接続はまだオープンされていません。新しい接続を使用する前に、open() を呼び出す必要があります。
このオーバーロードは、other で表されるデータベースで使用されているデータベー スに、別のスレッドでデータベースを複製する場合に便利です。
void QSqlDatabase::close()
データベース接続を閉じ、取得したリソースを解放し、データベースで使用されている既存のQSqlQuery オブジェクトを無効にします。
これは、このQSqlDatabase オブジェクトのコピーにも影響します。
removeDatabase()も参照してください 。
bool QSqlDatabase::commit()
ドライバがトランザクションをサポートしており、transaction() が開始されている場合、トランザクションをデータベースにコミットします。操作が成功した場合はtrue
を返します。そうでない場合はfalse
を返します。
注意: 一部のデータベースでは、active query がSELECT
のためにデータベースを使用している場合、コミットは失敗し、false
を返します。コミットを実行する前に、クエリinactive を作成してください。
エラーに関する情報を取得するにはlastError() をコールします。
QSqlQuery::isActive()、QSqlDriver::hasFeature() およびrollback()も参照 。
QString QSqlDatabase::connectOptions() const
この接続に使用されている接続オプション文字列を返します。文字列は空でもかまいません。
setConnectOptions() も参照 。
QString QSqlDatabase::connectionName() const
接続名を返しますが、空の場合もあります。
注意: 接続名は、database name.
addDatabase()も参照 。
[static]
QStringList QSqlDatabase::connectionNames()
すべての接続名を含むリストを返します。
注意:この関数はスレッドセーフです。
contains()、database()、およびスレッドと SQL モジュールも参照して ください。
[static]
bool QSqlDatabase::contains(const QString &connectionName = QLatin1StringView(defaultConnection))
データベース接続のリストにconnectionName が含まれている場合はtrue
を返し、そうでない場合はfalse
を返します。
注意:この関数はスレッドセーフです。
connectionNames()、database()、Threads and the SQL Moduleも参照してください 。
[static]
QSqlDatabase QSqlDatabase::database(const QString &connectionName = QLatin1StringView(defaultConnection), bool open = true)
connectionName というデータベース接続を返します。このデータベース接続は、以前にaddDatabase() で追加されている必要があります。open が真で (既定)、データベース接続がまだ開かれていない場合は、今開かれます。connectionName が指定されていない場合は、既定の接続が使用されます。connectionName がデータベースのリストに存在しない場合、無効な接続が返されます。
注意:この関数はスレッドセーフです。
isOpen() およびスレッドと SQL モジュールも参照してください 。
QString QSqlDatabase::databaseName() const
接続のデータベース名を返します。
注意: データベース名は接続名ではありません。
setDatabaseName()も参照して ください。
QSqlDriver *QSqlDatabase::driver() const
データベース接続へのアクセスに使用したデータベース・ドライバを返します。
addDatabase() およびdrivers() も参照して ください。
QString QSqlDatabase::driverName() const
接続のドライバ名を返します。
addDatabase() およびdriver() も参照して ください。
[static]
QStringList QSqlDatabase::drivers()
使用可能なすべてのデータベース・ドライバのリストを返します。
registerSqlDriver() も参照して ください。
QString QSqlDatabase::hostName() const
接続のホスト名を返します。
setHostName() も参照して ください。
[static]
bool QSqlDatabase::isDriverAvailable(const QString &name)
name というドライバが使用可能な場合はtrue
を返し、そうでない場合はfalse
を返します。
drivers() も参照 。
bool QSqlDatabase::isOpen() const
データベース接続が現在開いている場合はtrue
を返し、そうでない場合はfalse
を返します。
bool QSqlDatabase::isOpenError() const
データベース接続を開く際にエラーが発生した場合はtrue
を返し、そうでない場合はfalse
を返します。エラー情報はlastError() 関数を使用して取得できます。
bool QSqlDatabase::isValid() const
QSqlDatabase に有効なドライバがある場合はtrue
を返します。
例
QSqlDatabase db; qDebug() << db.isValid(); // Returns false db = QSqlDatabase::database("sales"); qDebug() << db.isValid(); // Returns \c true if "sales" connection exists QSqlDatabase::removeDatabase("sales"); qDebug() << db.isValid(); // Returns false
QSqlError QSqlDatabase::lastError() const
データベースで発生した最後のエラーに関する情報を返します。
個々のクエリに関連して発生したエラーは、QSqlQuery::lastError() で報告されます。
QSqlError およびQSqlQuery::lastError()も参照して ください。
[since 6.8]
bool QSqlDatabase::moveToThread(QThread *targetThread)
QSqlDatabase およびその関連ドライバのスレッド・アフィニティを変更します。この関数は、成功するとtrue
を返す。イベント処理はtargetThread で続行されます。
この操作の間、このインスタンスにバインドされているQSqlQuery がないことを確認する必要があります。さもないと、QSqlDatabase は指定されたスレッドに移動されず、関数はfalse
を返します。
関連するドライバはQObject から派生しているため、QObject を別のスレッドに移動するためのすべての制約は、この関数にも適用されます。
この関数は Qt 6.8 で導入されました。
QObject::moveToThread() およびThreads and the SQL Moduleも参照してください 。
QSql::NumericalPrecisionPolicy QSqlDatabase::numericalPrecisionPolicy() const
numericalPrecisionPolicy を返します。
注: プロパティ numericalPrecisionPolicy のゲッター関数です。
setNumericalPrecisionPolicy()も参照して ください。
bool QSqlDatabase::open()
現在の接続値を使用してデータベース接続を開きます。成功した場合はtrue
を返し、失敗した場合はfalse
を返します。エラー情報は、lastError() を使用して取得できます。
lastError()、setDatabaseName()、setUserName()、setPassword()、setHostName()、setPort()、setConnectOptions() も参照 。
bool QSqlDatabase::open(const QString &user, const QString &password)
これはオーバーロードされた関数です。
与えられたuser 名とpassword を使用してデータベース接続を開きます。成功した場合はtrue
を返し、失敗した場合はfalse
を返します。エラー情報は、lastError() 関数を使用して取得できます。
この関数は、与えられたパスワードを保存しません。代わりに、パスワードは接続を開くためにドライバに直接渡され、その後破棄される。
lastError()も参照のこと 。
QString QSqlDatabase::password() const
接続のパスワードを返します。パスワードがsetPassword() で設定されていない場合、およびopen() の呼び出しでパスワードが指定された場合、またはパスワードが使用されていない場合は、空の文字列が返される。
setPassword()も参照 。
int QSqlDatabase::port() const
接続のポート番号を返します。ポート番号が設定されていない場合、値は未定義です。
setPort() も参照 。
QSqlIndex QSqlDatabase::primaryIndex(const QString &tablename) const
テーブルtablename の主インデックスを返します。プライマリ・インデックスが存在しない場合は、空のQSqlIndex が返されます。
注意: QPSQLドライバなど一部のドライバでは、テーブルの作成時に引用符で囲んでいない場合、tablename を小文字で渡す必要がある場合があります。詳細はQt SQLドライバのドキュメントを参照してください。
tables() およびrecord()も参照して ください。
QSqlRecord QSqlDatabase::record(const QString &tablename) const
tablename と呼ばれるテーブル(またはビュー)内のすべてのフィールド名を含むQSqlRecord を返します。フィールドがレコードに現れる順序は未定義です。そのようなテーブル(またはビュー)が存在しない場合は、空のレコードが返される。
注意: QPSQLドライバなど一部のドライバでは、作成時にテーブルが引用符で囲まれていない場合、tablename を小文字で渡す必要がある場合があります。詳細はQt SQLドライバのドキュメントを参照してください。
[static]
void QSqlDatabase::registerSqlDriver(const QString &name, QSqlDriverCreatorBase *creator)
この関数は、name という新しいSQLドライバをSQLフレームワークに登録します。これは、カスタム SQL ドライバをプラグインとしてコンパイルしたくない場合に便利です。
例
QSqlDatabase::registerSqlDriver("MYDRIVER", new QSqlDriverCreator<QSqlDriver>); QVERIFY(QSqlDatabase::drivers().contains("MYDRIVER")); QSqlDatabase db = QSqlDatabase::addDatabase("MYDRIVER"); QVERIFY(db.isValid());
QSqlDatabase は ポインタの所有権を取りますので、自分で削除してはいけません。creator
drivers()も参照してください 。
[static]
void QSqlDatabase::removeDatabase(const QString &connectionName)
データベース接続connectionName をデータベース接続リストから削除します。
警告: この関数が呼ばれたときに、データベース接続上にオープンされているクエリがないことが必要です。
例を示します:
// WRONG QSqlDatabase db = QSqlDatabase::database("sales"); QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db); QSqlDatabase::removeDatabase("sales"); // will output a warning // "db" is now a dangling invalid database connection, // "query" contains an invalid result set
正しい方法:
{ QSqlDatabase db = QSqlDatabase::database("sales"); QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db); } // Both "db" and "query" are destroyed because they are out of scope QSqlDatabase::removeDatabase("sales"); // correct
デフォルト接続を削除するには、addDatabase() の呼び出しで接続名を指定せずに作成した可能性があるため、database() が返したデータベースでconnectionName() を呼び出してデフォルト接続名を取得します。デフォルトのデータベースが作成されていない場合は、無効なデータベースが返されることに注意してください。
注意:この関数はスレッド・セーフです。
database()、connectionName()、およびスレッドと SQL モジュールも参照してください 。
bool QSqlDatabase::rollback()
ドライバがトランザクションをサポートしており、transaction() が開始されている場合、データベースのトランザクションをロールバックします。操作が成功した場合はtrue
を返します。そうでない場合はfalse
を返します。
注意: 一部のデータベースでは、active query がSELECT
のためにデータベースを使用している場合、ロールバックは失敗し、false
を返します。ロールバックを実行する前に、クエリをinactive にします。
エラーに関する情報を取得するにはlastError() を呼び出します。
QSqlQuery::isActive()、QSqlDriver::hasFeature() およびcommit()も参照して ください。
void QSqlDatabase::setConnectOptions(const QString &options = QString())
データベース固有のoptions を設定します。これは、接続がオープンされる前に行う必要があります。接続を閉じ、QSqlDatabase::setConnectOptions() を呼び出し、open() 接続を再度開くという方法もあります。
options 文字列の形式は、オプション名または option=value ペアのセミコロン区切りリストです。オプションは使用するデータベースクライアントに依存し、各プラグインについてはSQL Database Driversのページで説明しています。
例
db.setConnectOptions("SSL_KEY=client-key.pem;SSL_CERT=client-cert.pem;SSL_CA=ca-cert.pem;CLIENT_IGNORE_SPACE=1"); // use an SSL connection to the server if (!db.open()) { db.setConnectOptions(); // clears the connect option string // ... } // ... // PostgreSQL connection db.setConnectOptions("requiressl=1"); // enable PostgreSQL SSL connections if (!db.open()) { db.setConnectOptions(); // clear options // ... } // ... // ODBC connection db.setConnectOptions("SQL_ATTR_ACCESS_MODE=SQL_MODE_READ_ONLY;SQL_ATTR_TRACE=SQL_OPT_TRACE_ON"); // set ODBC options if (!db.open()) { db.setConnectOptions(); // don't try to set this option // ... } }
各オプションの詳細については、クライアント・ライブラリのドキュメントを参照してください。
connectOptions()も参照ください 。
void QSqlDatabase::setDatabaseName(const QString &name)
接続のデータベース名をname に設定します。このオプションを有効にするには、接続がopened になる前にデータベース名を設定しておく必要があります。または、接続をclose() してデータベース名を設定し、open() を再度呼び出すこともできます。
注意: データベース名は接続名ではありません。接続名は、接続オブジェクト作成時にaddDatabase() に渡される必要があります。
QSQLITE ドライバでは、指定されたデータベース名が存在しない場合、QSQLITE_OPEN_READONLY オプションが設定されていない限り、ファイルが作成されます。
さらに、name を":memory:"
に設定すると、アプリケーションの存続期間のみ使用可能な一時データベースを作成します。
QOCI(Oracle)ドライバの場合、データベース名はTNSサービス名です。
QODBCドライバの場合、name はDSN、DSNファイル名(この場合、ファイルの拡張子は.dsn
)、または接続文字列のいずれかになります。
例えば、Microsoft Access ユーザーは、ODBC マネージャーで DSN エントリーを作成する代わりに、以下の接続文字列を使用して.mdb
ファイルを直接開くことができます:
// ... QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=myaccessfile.mdb"); if (db.open()) { // success! } // ...
デフォルト値はありません。
databaseName()、setUserName()、setPassword()、setHostName()、setPort()、setConnectOptions()、open()も参照の こと。
void QSqlDatabase::setHostName(const QString &host)
接続のホスト名をhost に設定します。ホスト名を有効にするには、接続がopened になる前に設定する必要があります。または、接続をclose() してホスト名を設定し、再度open() を呼び出すこともできます。
デフォルト値はありません。
hostName()、setUserName()、setPassword()、setDatabaseName()、setPort()、setConnectOptions()、open()も参照 。
void QSqlDatabase::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy)
numericalPrecisionPolicy をprecisionPolicy に設定します。
注釈: プロパティnumericalPrecisionPolicy に対するセッター関数です。
numericalPrecisionPolicy()も参照してください 。
void QSqlDatabase::setPassword(const QString &password)
接続のパスワードをpassword に設定します。パスワードを有効にするには、接続がopened になる前にパスワードを設定する必要があります。あるいは、接続をclose() してパスワードを設定し、再度open() を呼び出すこともできます。
デフォルト値はありません。
警告: この関数は、Qt 内でパスワードをプレーン・テキストで保存します。この動作を避けるには、パスワードをパラメータとするopen() を使用してください。
password()、setUserName()、setDatabaseName()、setHostName()、setPort()、setConnectOptions()、open()も参照してください 。
void QSqlDatabase::setPort(int port)
接続のポート番号をport に設定します。ポート番号を有効にするには、接続がopened になる前に設定する必要があります。または、接続をclose() してポート番号を設定し、再度open() を呼び出すこともできます。
デフォルト値はありません。
port()、setUserName()、setPassword()、setHostName()、setDatabaseName()、setConnectOptions()、open()も参照 。
void QSqlDatabase::setUserName(const QString &name)
接続のユーザ名をname に設定します。このユーザ名を有効にするには、接続がopened になる前にユーザ名を設定する必要があります。または、接続をclose() してユーザ名を設定し、再度open() を呼び出すこともできます。
デフォルト値はありません。
userName()、setDatabaseName()、setPassword()、setHostName()、setPort()、setConnectOptions()、open()も参照 。
QStringList QSqlDatabase::tables(QSql::TableType type = QSql::Tables) const
type パラメータで指定したデータベースのテーブル、システム・テーブル、およびビューのリストを返します。
primaryIndex() およびrecord()も参照してください 。
[since 6.8]
QThread *QSqlDatabase::thread() const
関連するQThread インスタンスへのポインタを返します。
この関数は Qt 6.8 で導入されました。
bool QSqlDatabase::transaction()
ドライバがトランザクションをサポートしている場合、データベース上でトランザクションを開始します。操作が成功した場合はtrue
を返します。そうでない場合はfalse
を返します。
QSqlDriver::hasFeature(),commit(),rollback()も参照してください 。
QString QSqlDatabase::userName() const
接続のユーザ名を返します。
空の場合も あります。setUserName()も参照して ください。
QSqlDatabase &QSqlDatabase::operator=(const QSqlDatabase &other)
このオブジェクトにother を割り当てます。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。