データベースへの接続

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();

最初の行で接続オブジェクトを作成し、最後の行でそれをオープンして使用しています。その間に、database namehost nameuser namepassword などの接続情報を初期化しています。この場合、ホスト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() を使って削除します。

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