データベースへの接続
QSqlQuery またはQSqlQueryModel を使用してデータベースにアクセスするには、1つ以上のデータベース接続を作成して開きます。データベース接続は通常、データベース名ではなく接続名で識別されます。 同じデータベースに対して複数の接続を持つことができます。QSqlDatabase は、名前を持たない接続である「デフォルト接続」の概念もサポートしています。接続名を引数として取るQSqlQuery やQSqlQueryModel といったメンバ関数を呼び出す際、接続名を指定しない場合は、デフォルト接続が使用されます。アプリケーションで必要なデータベース接続が1つだけの場合、デフォルト接続を作成しておくと便利です。
接続の作成と接続の開放の違いに注意してください。接続の作成とは、QSqlDatabase クラスのインスタンスを作成することを指します。接続は、開放されるまで使用できません。以下のスニペットは、デフォルト接続を作成し、それを開放する方法を示しています。
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("bigblue");
db.setDatabaseName("flightdb");
db.setUserName("acarlson");
db.setPassword("1uTbSbAs");
bool ok = db.open();1行目で接続オブジェクトを作成し、最後の行でそれを開いて使用可能にします。その間に、database name 、host name 、user name 、password などの接続情報を初期化しています。この例では、ホストbigblue 上のMySQLデータベースflightdb に接続しています。addDatabase()への"QMYSQL" 引数は、接続に使用するデータベースドライバの種類を指定します。 Qt に付属するデータベースドライバの一覧は、サポートされているデータベースドライバの表に示されています。
このスニペットでの接続は、addDatabase() の 2 番目の引数(接続名)を指定していないため、デフォルトの接続となります。例えば、ここでは"first" および"second" という名前の 2 つの MySQL データベース接続を確立します。
QSqlDatabase firstDB = QSqlDatabase::addDatabase("QMYSQL", "first");
QSqlDatabase secondDB = QSqlDatabase::addDatabase("QMYSQL", "second");これらの接続が初期化された後、各接続に対してopen() を呼び出して、アクティブな接続を確立します。open() が失敗した場合、false が返されます。その場合は、QSqlDatabase::lastError() を呼び出してエラー情報を取得します。
接続が確立されると、接続名を指定してどこからでも静的関数 `QSqlDatabase::database()` を呼び出し、そのデータベース接続へのポインタを取得できます。接続名を指定しない場合は、デフォルトの接続が返されます。例:
QSqlDatabase defaultDB = QSqlDatabase::database();
QSqlDatabase firstDB = QSqlDatabase::database("first");
QSqlDatabase secondDB = QSqlDatabase::database("second");データベース接続を削除するには、まずQSqlDatabase::close() を使用してデータベースを閉じ、次に静的メソッドQSqlDatabase::removeDatabase() を使用して接続を削除します。
© 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.