2.1.1 データベースへの接続

アプリケーションでは,接続先データベース定義ファイルのデータベース種別名及びデータベース名を使用してデータベースに接続します。接続先データベース定義ファイルを使うことによって,接続条件に変更が発生した場合などでも,アプリケーションを変更することなく,接続するデータベースの変更ができます。

<この項の構成>
(1) 接続先データベース定義ファイルの作成
(2) データベースとの接続
(3) 複数データベースへの接続

(1) 接続先データベース定義ファイルの作成

データベースに接続するために,接続先データベース定義ファイルを作成しておく必要があります。接続先データベース定義ファイルの作成方法については,マニュアル「DABroker」を参照してください。

次に,接続先データベース定義ファイルの定義形式の例を示します。

(定義形式の例)

DBDEF_HIR1{                          # データベース種別名
   DBTYPE=hirdb                     # データベース種別
   db01{                            # データベース名
       DBHOST=host01                # データベースのホスト名
       DBNAME=22200                 # データベースのポート番号
       USRID="uid"                  # ユーザID
       PASSWD="passwd"              # パスワード
   }
}

TPBroker for C++のOTS機能を使用してトランザクション制御を行う場合,接続先定義ファイルは使用できません。

(2) データベースとの接続

(a) 簡易版クラス

アプリケーションからデータベースアクセスを行うためには,DBRDatabaseクラスのコンストラクタで,接続先データベース定義ファイルのデータベース種別名を指定し,Databaseオブジェクトを生成します。次に,DatabaseオブジェクトのConnectメソッドの引数にデータベース名やユーザID,パスワードを指定しデータベースと接続します。

//////////////////////////////////////////////////////////////
///  単一データベースとの接続と切断の例
DBRDatabase *pDB1;
    pDB1 = new DBRDatabase(         // Databaseオブジェクトを生成
                     "DBDEF_HIR1",  // データベース種別名称
                      NULL,0);
// データベースとの接続
    pDB1->Connect("UID",                      // ユーザID
                    "PASS",                   // パスワード
                     NULL,NULL,
                    "db01",                   // データベース名
                     LOCK_OPT_WAIT,0,STMT_SYNC);
//   データベースとの接続を切断
    pDB1->close();                         // データベースとの接続を切断

(b) 詳細版クラス

アプリケーションからデータベースと接続を行うには,DBDriverManagerクラス, DBDriverクラス, DBConnectionクラスを使用します。

まず,DBDriverManagerクラスからトップオブジェクトであるDriverManagerオブジェクトを生成する必要があり,これは,new演算子,又は自動変数として生成します。

次に,DriverManagerオブジェクトのDriverメソッドを呼び出してDriverオブジェクトを生成します。このDriverメソッドの引数には,接続先データベース定義ファイルで定義してある,データベース種別名を指定します。

Driverオブジェクトを生成後,接続先のデータベース名やユーザID,パスワードを指定したConnectメソッドを呼び出してデータベースと接続し,Connectionオブジェクトを生成します。

注※ DriverManagerオブジェクト以外のオブジェクトは必ず,上位オブジェクトの生成メソッドを使って,生成してください。また,必ず削除メソッドを使って,削除してください。

///////////////////////////////////////////////////////////////
///  単一データベースとの接続と切断の例
DBDriverManager*  pDrvMan;
DBDriver * pDriver = NULL;
DBConnection * pConnect = NULL;

//データベース接続
     pDrvMan = new DBDriverManager;
                              //DriverManagerをnew演算子で生成
     pDrvMan->InitializeMessage();
     pDriver = pDrvMan->Driver("DBDEF_HIR1");
                                    // データベース種別名の設定
     pConnect = pDriver->Connect("Con1",           // オブジェクト名
                                      "UserID",    // ユーザID
                                      "Password",  // パスワード
                                      NULL,NULL,
                                      "db01",      // データベース名
                                      LOCK_OPT_WAIT,0,STMT_SYNC);
//データベース切断
     pDriver->RemoveConnection("Con1");      // データベース切断
     pConnect = NULL;
     delete pDrvMan;                         // トップオブジェクトの削除
     pDrvMan = NULL;

(3) 複数データベースへの接続

一つのアプリケーションから,複数のデータベースをアクセスできます。例えば,HiRDBで作成した支店データベースと全社データベースというような,複数データベースにアクセスできます。また,HiRDBとORACLEといった,複数種別のデータベースにもアクセスできます。複数のデータベース間の整合性を保ちながらアクセスする場合は,TPBroker for C++のOTS機能を使用したトランザクション制御が必要です。

(a) データベースとオブジェクトの関係

簡易版クラスでは,データベースごとにDBRDatabaseクラスでDatabaseオブジェクトを生成し,DatabaseオブジェクトのConnectメソッドを使用してデータベースと接続します。

詳細版クラスでは,データベース種別ごとにDBDriverオブジェクトを生成し,データベースごとに,Connectメソッドでデータベースと接続し,DBConnectionオブジェクトを生成します。

(b) 接続できるデータベースの数

DABrokerでは同時に接続できる数に制限はありませんが,接続できる数は,データベースの同時ユーザ数(そのデータベースに同時にログインできるユーザ数の制限)に依存します。

//////////////////////////////////////////////////////////////
//   複数のデータベースにアクセスする例
//   オブジェクトの生成
    DBRDatabase db1("DBDEF_HIR1",NULL,0);
    DBRDatabase db2("DBDEF_RDALINK",NULL,0);
    DBRDatabase db3("DBDEF_RDALINK",NULL,0);
//   データベースとの接続
    db1.Connect("UserID","password",         // ユーザID,パスワード
                   NULL,NULL,
                  "db01",                         // データベース名
                   LOCK_OPT_WAIT,0,STMT_SYNC);
    db2.Connect("UserID","password",         // ユーザID,パスワード
                   NULL,NULL,
                  "db02",                         // データベース名
                   LOCK_OPT_WAIT,0,STMT_SYNC);
    db3.Connect("UserID","password",         // ユーザID,パスワード
                   NULL,NULL,
                  "db03",                         // データベース名
                   LOCK_OPT_WAIT,0,STMT_SYNC);

//   データベースとの接続を切断
    db1.close();                           // データベースとの接続を切断
    db2.close();                          
    db3.close();