Cosminexus V9 アプリケーションサーバ 機能解説 互換編

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

4.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の指定値に必要な領域サイズが有効となります。

    表4-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

    (例1)
    HiRDB接続でFetchSize=3,検索カラムがvarchar(10),integerの場合
    受信ヘッダ(48)+((行ヘッダ(4)+データ長(4)+varcharデータ(10)+データ長(4)+integerデータ(4))*3)
    となり,必要となるバッファ領域は126バイトとなります。この場合,合計が64キロバイト以下のため,確保される領域は64キロバイトになります。

    (例2)
    HiRDB接続でFetchSize=100,検索カラムがvarchar(1000),integerの場合
    受信ヘッダ(48)+((行ヘッダ(4)+データ長(4)+varcharデータ(1000)+integerデータ(4))*100)
    となり,101248バイトのバッファ領域が確保されます。確保される領域が,プロパティのBUF_SIZE,またはDataSourceのsetBufSizeの指定値を超えた場合は,setFetchSizeの指定値に必要な領域サイズが有効となります。

  • 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クラスの制限事項を,次に示します。

表4-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だけの機能を次に示します。

メソッド一覧
メソッド名 機能
getExecuteDirectModeメソッド 接続データベースがHiRDBの場合,Statementクラスを使用したデータベースの更新で,HiRDBのExecute Direct機能を使用するかどうかの設定情報を取得します。
setExecuteDirectModeメソッド 接続データベースがHiRDBの場合,Statementクラスを使用したデータベースの更新で,HiRDBのExecute Direct機能を使用するかどうかを設定します。
 
<この節の構成>
getExecuteDirectModeメソッド
setExecuteDirectModeメソッド