Hitachi

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


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

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

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

メソッド一覧

メソッド名

機能

getExecuteDirectModeメソッド

接続データベースがHiRDBの場合,Statementクラスを使用したデータベースの更新で,HiRDBのExecute Direct機能を使用するかどうかの設定情報を取得します。

setExecuteDirectModeメソッド

接続データベースがHiRDBの場合,Statementクラスを使用したデータベースの更新で,HiRDBのExecute Direct機能を使用するかどうかを設定します。

〈この節の構成〉