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

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

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

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

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

クラス名DBMSの種類※1
AB
DBConnection※211
DBStatement11
DBPreparedStatement11
DBCallableStatement※322
DBRDatabase※2※411
DBRResultSet※511
注※1 DBMSの種類は以下のとおりです。
AHiRDB,VOS3 XDM/RD,VOS3 XDM/SD,VOSK SQL/K,Oracle
BSQL Anywhere,Adaptive Server Anywhere,SQL Server
注※2 非同期処理の場合は,A,Bともに0となります。
注※3 厳密には,オブジェクト生成時は一つだけ使用し,SetProcedureメソッドを実行するともう一つ使用します。
注※4 厳密には,Connectメソッド実行後からCloseメソッド実行後まで占有します。
注※5 厳密には,オブジェクトを生成しただけでは使用しません。Executeメソッドを実行したときに使用します。

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

クラス名メソッド名DBMSの種類※1
AB
DBConnectionExecuteDirect※201
DBDatabaseMetaDataGetTable11
GetColumns11
GetProcedures22
GetprocedureColumns11
GetPrimaryKeys11
DBStatementExecute01
GetResult01
DBPreparedStatementExecute01
GetResult01
DBCallableStatementSetProcedure01
Execute01
Resume1
DBResultSetUpdate12
Delete12
DBRDatabaseExecuteDirect※201
DBRResultSetUpdate12
Delete12

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

AHiRDB,VOS3 XDM/RD,VOS3 XDM/SD,VOSK SQL/K,Oracle
BSQL Anywhere,Adaptive Server Anywhere,SQL Server

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

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