アプリケーションでは,接続先データベース定義ファイルのデータベース種別名及びデータベース名を使用してデータベースに接続します。接続先データベース定義ファイルを使うことによって,接続条件に変更が発生した場合などでも,アプリケーションを変更することなく,接続するデータベースの変更ができます。
データベースに接続するために,接続先データベース定義ファイルを作成しておく必要があります。接続先データベース定義ファイルの作成方法については,マニュアル「DABroker」を参照してください。
次に,接続先データベース定義ファイルの定義形式の例を示します。
DBDEF_HIR1{ # データベース種別名
DBTYPE=hirdb # データベース種別
db01{ # データベース名
DBHOST=host01 # データベースのホスト名
DBNAME=22200 # データベースのポート番号
USRID="uid" # ユーザID
PASSWD="passwd" # パスワード
}
}
TPBroker for C++のOTS機能を使用してトランザクション制御を行う場合,接続先定義ファイルは使用できません。
アプリケーションからデータベースアクセスを行うためには,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(); // データベースとの接続を切断
アプリケーションからデータベースと接続を行うには,DBDriverManagerクラス, DBDriverクラス, DBConnectionクラスを使用します。
まず,DBDriverManagerクラスからトップオブジェクトであるDriverManagerオブジェクトを生成する必要があり,これは,new演算子,又は自動変数として生成します。※
次に,DriverManagerオブジェクトのDriverメソッドを呼び出してDriverオブジェクトを生成します。このDriverメソッドの引数には,接続先データベース定義ファイルで定義してある,データベース種別名を指定します。
Driverオブジェクトを生成後,接続先のデータベース名やユーザID,パスワードを指定したConnectメソッドを呼び出してデータベースと接続し,Connectionオブジェクトを生成します。
///////////////////////////////////////////////////////////////
/// 単一データベースとの接続と切断の例
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;
一つのアプリケーションから,複数のデータベースをアクセスできます。例えば,HiRDBで作成した支店データベースと全社データベースというような,複数データベースにアクセスできます。また,HiRDBとORACLEといった,複数種別のデータベースにもアクセスできます。複数のデータベース間の整合性を保ちながらアクセスする場合は,TPBroker for C++のOTS機能を使用したトランザクション制御が必要です。
簡易版クラスでは,データベースごとにDBRDatabaseクラスでDatabaseオブジェクトを生成し,DatabaseオブジェクトのConnectメソッドを使用してデータベースと接続します。
詳細版クラスでは,データベース種別ごとにDBDriverオブジェクトを生成し,データベースごとに,Connectメソッドでデータベースと接続し,DBConnectionオブジェクトを生成します。
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();