retireSakiの日記

たぶん引退した?ソフトウエアエンジニアのブログ

QtのQSqlDatabaseでドライバーがロード済かどうか判断する方法

 QSqlDatabaseを使ったデータベースドライバーは、基本的にアプリ内で1回ロードすることを推奨しています。
 QSqlDatabase db = QSqlDatabase::addDatabase(<driver>);

mainwindowなどで一度callして、使いまわすのが妥当です。
しかし、クラスの相関関係などで、どうしてもそうできないときがあると思います。

そういう場合、以下の方法で判断できます。

  QSqlDatabase db;

 if ( db.connectionNames().length() == 0)
  db = QSqlDatabase::addDatabase(<driver>, <connection name>);
 else
  db = QSqlDatabase::database(<connection name>);


<connection name>を指定し、<connection name>が存在するかどうかで判断します。

上の例では、1つのドライバーを使うことを前提にしているので、<connection name>の存在の有無で判断していますが、複数の場合、db.connectionNames().indexOf(<connection name>)を使うとよいでしょう。

2回目以降のcallでは、QSqlDatabase::database() を使って、再利用します。

 QSqlDatabase はスレッドセーフなため、ドライバーはそのアプリ内でロードされたままになっているため、QSqlDatabase::addDatabase(<driver>) を2回以上呼び出すと、前回のコネクションを捨てて再設定されてしまいます。
デバックモードでインフォーメーションが発生するのは、このためです。
スッキリわかる SQL 入門 ドリル215問付き! (スッキリシリーズ)

スッキリわかる SQL 入門 ドリル215問付き! (スッキリシリーズ)

 
新人エンジニアのための データベースのしくみと運用がわかる本

新人エンジニアのための データベースのしくみと運用がわかる本

 
業務別データベース設計のためのデータモデリング入門

業務別データベース設計のためのデータモデリング入門

 
グラス片手にデータベース設計~生産管理システム編 (DB Magazine Selection)

グラス片手にデータベース設計~生産管理システム編 (DB Magazine Selection)

 
[改訂第4版]SQLポケットリファレンス

[改訂第4版]SQLポケットリファレンス

 

 

注目記事

「Amazon.co.jpアソシエイト」または「[乙の名称を挿入]は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。