18.13 Statementクラス
- 説明
-
Statementクラスでは,主に次の機能を提供します。
-
SQLの実行
-
検索結果として,ResultSet(ResultSetオブジェクト)の生成
-
更新結果として,更新行数の返却
-
最大検索行数の設定
-
検索制限時間の設定
Statementクラスの提供する各メソッドの詳細,および使用方法については,JavaSoft提供のJDBC関連ドキュメントを参照してください。
-
- 注意事項
-
-
マルチスレッド
一つのStatementオブジェクトを複数のスレッドで使用する場合,「SQLの実行〜ResultSetの取得〜ResultSetのクローズ」という一連の処理を,スレッドごとにシリアライズする必要があります。シリアライズしないで並行して処理した場合の動作は保証しません。
各スレッドには,それぞれ別のStatementオブジェクトを割り当ててください。
-
複数のResultSet
DABroker Libraryでは,複数のResultSetを返却する機能をサポートしていません。このため,getMoreResultsメソッドは無条件にfalseを返却し,現在オープンしているResultSetが存在する場合,そのResultSetをクローズします。
-
カーソル名称
DABroker Libraryでは,位置決めされた更新および削除をサポートしていないため,setCursorNameメソッドは何もしません。
-
検索制限時間
DABroker Libraryでは,検索の時間監視はできません。このため,setQueryTimeoutメソッドで指定した値は無効となります。
-
setFetchSizeメソッドの使用について
setFetchSizeメソッドが有効になるのは,通常の検索の場合だけです。ResultSetMetaDataやDatabaseMetaDataの情報取得では有効になりません。
CLOBやBLOBなどのLONGVARCHAR・LONGVARBINARY型データを含むテーブルの検索では,setFetchSizeメソッドの設定値は有効になりません。
setFetchSizeメソッドを使用する場合,データ取得用のバッファサイズはsetFetchSizeメソッドの指定値,および検索するカラムの定義長などによって変化します。そのため,setFetchSizeメソッドでの指定値が大き過ぎる場合や検索するカラムの定義長の合計が極端に大きくなる場合,メモリ不足が発生する可能性があるので注意が必要です。
setFetchSizeメソッドでの指定値が1以上の場合,必要となるバッファ領域は自動的に確保されます。この場合,どの程度の領域を必要とするかの計算方法を,次の表に示します。
バッファ領域に指定できる最大値は2147483647バイトです。最大値を超えないようにしてください。
ただし,DABroker Libraryの最小バッファサイズが64キロバイトのため,領域サイズが64キロバイトより小さい場合は,64キロバイトに設定されます。また,領域サイズが接続時にプロパティのBUF_SIZE,またはDataSourceのsetBufSizeメソッドで指定した値を超えた場合は,setFetchSizeの指定値に必要な領域サイズが有効となります。
表18‒76 setFetchSizeメソッド使用で必要となるバッファ領域 DBMS
データ型
必要となるバッファ領域
(単位:バイト)
共通
HiRDB
int,integer,smallflt,real
4
date
10
smallint
2
dec,decimal(m.n)
(m + 1) / 2
float,double precision
8
char(n),mchar(n),rowid(n),varchar(n),mvarchar(n)
n
nchar(n),nvarchar(n)
n * 2
time
8
timestamp(n)
7 + n / 2
ORACLE
varchar2(n),char(n),raw(n),mlslabel(n)
n
number
22
float,rowid
8
date
20
-
Statementのクローズ
プーリング使用時(ConnectionPoolDataSourceを使用した接続),およびXA使用時(XADataSourceを使用した接続)でStatementのcloseメソッドの発行でエラーが発生した場合,SQLExceptionをスローしません。また,プーリング使用時,およびXA使用時でStatementのcloseメソッド実行中にデータベースとの物理的な切断でエラーが発生してコネクションプーリングが使用できなくなった場合,ConnectionEventListener.connectionErrorOccurredは発生しません。
-
非同期キャンセル
接続データベースがHiRDBまたはORACLEの場合,cancelメソッドを使用して非同期キャンセルを発行できます。ただし,XADataSourceを使用した接続の場合,非同期キャンセルの実行は接続データベースの仕様に従います(HiRDBはXADataSourceを使用した接続時の非同期キャンセルをサポートしていません。そのため非同期キャンセル要求は有効になりません)。
また,HiRDBクライアント経由XDM/RD E2接続時の非同期キャンセルはサポートしていません。
-
- 制限事項
-
DABroker Libraryで使用するStatementクラスの制限事項を,次に示します。
表18‒77 Statementクラスの制限事項 メソッド名
制限事項
JDBC1.0での制限
JDBC2.0での制限
cancel
接続データベース種別がHiRDBまたはORACLEの場合だけ有効です。
○
○
close
プーリング使用時(ConnectionPoolDataSource使用した接続),およびXA使用時(XADataSourceを使用した接続)でStatement.closeメソッド実行中にエラーが発生した場合,SQLExceptionをスローしません。また,プーリング使用時,およびXA使用時でStatement.closeメソッド実行中にデータベースとの物理的な切断でエラーが発生してコネクションプーリングが使用できなくなった場合,ConnectionEventListener.connectionErrorOccurredは発生しません。
○
○
getFetchSize
0,またはsetFetchSizeメソッドで指定された値がsetMaxRowsメソッドで指定された値より小さい場合はsetFetchSizeメソッドで指定された値を,setFetchSizeメソッドで指定された値がsetMaxRowsメソッドで指定された値より大きい場合はsetMaxRowsメソッドで指定された値を返却します。
−
○
getMaxFieldSize
setMaxFieldSizeが指定されていない場合0を返却します。
○
○
getMaxRows
setMaxRowsが指定されていない場合は0を返却します。
○
○
getMoreResults
無条件に結果なし=falseを返却します。
○
○
setCursorName
使用できません。
○
○
setFetchDirection
FETCH_FORWARD以外を指定した場合,SQLExceptionをスローします。
−
○
setFetchSize
接続データベース種別がHiRDB,またはORACLEの場合で,CLOBやBLOBなどのLONG VARCHAR・LONG VARBINARY型データ列の検索を含まないときだけ有効となります。
−
○
setMaxFieldSize
0より小さい値を指定した場合,SQLExceptionをスローします。
○
○
setMaxRows
0より小さい値を指定した場合,SQLExceptionをスローします。
○
○
- DABroker Library提供メソッド
-
Statementクラスで提供している,DABroker Libraryだけの機能を次に示します。
- メソッド一覧
-
メソッド名
機能
接続データベースがHiRDBの場合,Statementクラスを使用したデータベースの更新で,HiRDBのExecute Direct機能を使用するかどうかの設定情報を取得します。
接続データベースがHiRDBの場合,Statementクラスを使用したデータベースの更新で,HiRDBのExecute Direct機能を使用するかどうかを設定します。