QSqlDatabase Class
QSqlDatabase クラスは、データベースへの接続を処理します。詳細...
| ヘッダー: | #include <QSqlDatabase> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Sql) target_link_libraries(mytarget PRIVATE Qt6::Sql) |
| qmake: | QT += sql |
| 継承元: | QSqlDatabaseDefaultConnectionName |
- 継承されたメンバを含むすべてのメンバの一覧
- 非推奨のメンバ
- 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 = defaultConnectionName()) |
| QSqlDatabase | addDatabase(QSqlDriver *driver, const QString &connectionName = defaultConnectionName()) |
| QSqlDatabase | cloneDatabase(const QSqlDatabase &other, const QString &connectionName) |
| QSqlDatabase | cloneDatabase(const QString &other, const QString &connectionName) |
| QStringList | connectionNames() |
| bool | contains(const QString &connectionName = defaultConnectionName()) |
| QSqlDatabase | database(const QString &connectionName = defaultConnectionName(), 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 インスタンスにも影響します。既存の接続に基づいて独立したデータベース接続を作成するには、cloneDatabase() を使用してください。
警告: QSqlDatabaseのコピーをクラスのメンバとして保持することは、シャットダウン時にインスタンスが正しくクリーンアップされなくなるため、強く推奨されません 。 既存の 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、および「スレッドとSQLモジュール」を参照してください。
プロパティのドキュメント
[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 | Borland InterBase ドライバ |
| QMYSQL | MySQL ドライバ |
| QOCI | Oracle Call Interface ドライバ |
| 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 = defaultConnectionName())
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 = defaultConnectionName())
このオーバーロードは、自分でインスタンス化したdriver を使用してデータベース接続を確立したい場合に便利です。これは、独自に開発したデータベースドライバの場合もあれば、Qtのドライバの1つを自分でインスタンス化する必要がある場合もあるでしょう。 この場合、ドライバーのコードをアプリケーションに組み込むことをお勧めします。たとえば、独自の 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 ヘッダーファイルがインクルード検索パス内のどこかに存在することを前提として、PostgreSQL クライアントライブラリを使用し、QPSQLDriver オブジェクトをインスタンス化するために必要なコードが読み込まれます。
アプリケーションをデータベースクライアントライブラリに対してリンクする必要があることに注意してください。クライアントライブラリがリンカーの検索パスに含まれていることを確認し、.pro ファイルに次のような行を追加してください:
unix:LIBS += -lpq
win32:LIBS += libpqdll.libここで説明した方法は、提供されているすべてのドライバで機能します。唯一の違いは、ドライバのコンストラクタの引数です。以下に、Qt に含まれるドライバ、そのソースコードファイル、およびコンストラクタの引数をまとめた表を示します:
| ドライバ | クラス名 | コンストラクタの引数 | インクルードするファイル |
|---|---|---|---|
| QPSQL | QPSQLDriver | PGconn *connection | qsql_psql.cpp |
| QMYSQL | QMYSQLDriver | MYSQL *connection | qsql_mysql.cpp |
| QOCI | QOCIDriver | OCIEnv *environment、OCISvcCtx *serviceContext | 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 | QIMERQMimerSQLDriverMimerSession *connectionQIBASE | isc_db_handle 接続 | 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 = defaultConnectionName())
データベース接続のリストに `connectionName` が含まれている場合は `true ` を返し、そうでない場合は `false` を返します。
注: この関数はスレッドセーフです。
関連項目: connectionNames(),database(), および「スレッドと SQL モジュール」。
[static] QSqlDatabase QSqlDatabase::database(const QString &connectionName = defaultConnectionName(), bool open = true)
connectionName という名前のデータベース接続を返します。このデータベース接続は、事前にaddDatabase()で追加されている必要があります。open がtrue(デフォルト)で、かつデータベース接続がまだ開かれていない場合は、この時点で接続が開かれます。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 falseQSqlError 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() および「スレッドと SQL モジュール」も参照してください 。
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 ドライバのドキュメントを参照してください。
QSqlRecord QSqlDatabase::record(const QString &tablename) const
tablename という名前のテーブル(またはビュー)に含まれるすべてのフィールド名が格納されたQSqlRecord を返します。レコード内のフィールドの表示順序は未定義です。該当するテーブル(またはビュー)が存在しない場合は、空のレコードが返されます。
注: QPSQLドライバなど一部のドライバでは 、テーブルの作成時に引用符で囲まれていなかった場合、tablename を小文字で渡す必要がある場合があります。詳細については、Qt SQL ドライバのドキュメントを参照してください。
[static] void QSqlDatabase::registerSqlDriver(const QString &name, QSqlDriverCreatorBase *creator)
この関数は、SQLフレームワーク内に「name 」という新しい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"); // correctaddDatabase() の呼び出し時に接続名を指定せずに作成された可能性のあるデフォルトの接続を削除するには、database() によって返されたデータベースに対してconnectionName() を呼び出すことで、デフォルトの接続名を取得できます。なお、デフォルトのデータベースが作成されていない場合、無効なデータベースが返されることに注意してください。
注: この関数はスレッドセーフです。
関連項目: database()、connectionName()、および「スレッドとSQLモジュール」。
bool QSqlDatabase::rollback()
ドライバがトランザクションをサポートしており、transaction() が開始されている場合、データベース上のトランザクションをロールバックします。操作が成功した場合は、true を返します。それ以外の場合は、false を返します。
注:一部のデータベースでは 、そのデータベースを使用して `SELECT` を行っている `active query ` が存在する場合、ロールバックは失敗し、`false ` を返します。ロールバックを実行する前に、クエリ `inactive ` を実行してください。
エラーに関する情報を取得するには、lastError() を呼び出してください。
QSqlQuery::isActive()、QSqlDriver::hasFeature()、およびcommit()も参照してください 。
void QSqlDatabase::setConnectOptions(const QString &options = QString())
データベース固有のoptions を設定します。これは接続を開く前に実行する必要があります。そうしないと、効果がありません。別の方法として、接続を閉じ、QSqlDatabase::setConnectOptions()を呼び出し、open()で接続を再度開くこともできます。
options の文字列形式は、オプション名または「オプション=値」のペアをセミコロンで区切ったリストです。オプションは使用するデータベースクライアントによって異なり、各プラグインについては「SQLデータベースドライバ」ページで説明されています。
例:
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 を割り当てます。
© 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.