DABroker for C++

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

3.3.2 データベースアクセスリソース数の制限

DABroker for C++ でSQLを実行する場合,カーソルというリソースを使用します。このカーソルは,処理内容によって必要な個数が異なります。

一つのカーソルに対する占有期間は,オブジェクトの生存期間に依存するケースとメソッド実行時にだけ必要とするケースの二つのケースに分けることができます。オブジェクトの生存期間に依存するケースは,オブジェクトが作成されてから削除されるまで占有します。メソッド実行時にだけ必要とするケースは,そのメソッドの実行が終了すると解放します。一つのコネクションで使用できるカーソル数は64個までです。64個を超えた場合は,DBSQLCA例外をスローしますので64個を超えないようにプログラムで制御する必要があります。

オブジェクトの生存期間に依存するケースで使用するカーソル数を表3-1,メソッド実行時にだけ必要とするケースで使用するカーソル数を表3-2に示します。

表3-2 オブジェクトの生存期間に依存するケース

クラス名 DBMSの種類※1
A B
DBConnection※2 1 1
DBStatement 1 1
DBPreparedStatement 1 1
DBCallableStatement※3 2 2
DBRDatabase※2※4 1 1
DBRResultSet※5 1 1

注※1 DBMSの種類は以下のとおりです。
A HiRDB,VOS3 XDM/RD,VOS3 XDM/SD,VOSK SQL/K,Oracle
B SQL Anywhere,Adaptive Server Anywhere,SQL Server

注※2 非同期処理の場合は,A,Bともに0となります。

注※3 厳密には,オブジェクト生成時は一つだけ使用し,SetProcedureメソッドを実行するともう一つ使用します。

注※4 厳密には,Connectメソッド実行後からCloseメソッド実行後まで占有します。

注※5 厳密には,オブジェクトを生成しただけでは使用しません。Executeメソッドを実行したときに使用します。

表3-3 メソッド実行だけ必要とするケース

クラス名 メソッド名 DBMSの種類※1
A B
DBConnection ExecuteDirect※2 0 1
DBDatabaseMetaData GetTable 1 1
GetColumns 1 1
GetProcedures 2 2
GetprocedureColumns 1 1
GetPrimaryKeys 1 1
DBStatement Execute 0 1
GetResult 0 1
DBPreparedStatement Execute 0 1
GetResult 0 1
DBCallableStatement SetProcedure 0 1
Execute 0 1
Resume 1
DBResultSet Update 1 2
Delete 1 2
DBRDatabase ExecuteDirect※2 0 1
DBRResultSet Update 1 2
Delete 1 2

注※1 DBMSの種類は以下のとおりです。

A HiRDB,VOS3 XDM/RD,VOS3 XDM/SD,VOSK SQL/K,Oracle
B SQL Anywhere,Adaptive Server Anywhere,SQL Server

注※2 非同期処理の場合は,A:1 B:2となります。

(使用例)
HiRDB使用時に,DBStatementオブジェクトを二つ,DBCallableStatement オブジェクトを一つ作成し,DBResultSetオブジェクトでUpdateメソッドを実行した場合のカーソル使用数を次に示します。
クラス数 オブジェクト数 オブジェクト単位のカーソル使用数 カーソル使用数
DBConnection 1 1 1
DBStatement 2 1 2
DBCallableStatement 1 2 2
合計     5
さらに,メソッド実行時に一時的に一つ使用するため,合計6個のカーソルを使用することになります。