DABroker for C++

[目次][用語][索引][前へ][次へ]

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