Hitachi

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


18.7.2 JDBC2.0の概要

ここでは,DABroker Libraryで提供する,JDBC2.0基本規格に沿った機能の概要と注意事項について説明します。JDBC1.0が提供するクラスとメソッドの機能,およびJDBC2.0で規格化されていないDBPドライバだけの機能については,マニュアル「アプリケーションサーバ リファレンス API編」を参照してください。

〈この項の構成〉

(1) ResultSetの拡張

JDBC2.0基本規格では,ResultSet(ResultSetクラス)の拡張機能として,「スクロール」と「並行処理」が追加されています。

(a) スクロールタイプ

ResultSetのスクロールタイプには,次の3種類があります。

  • 順方向専用型

    JDBC1.0からの標準のスクロールタイプです。ResultSet内を,順方向(上から下)にだけスクロールできます。

  • スクロール非反映型

    JDBC2.0で導入されたスクロールタイプです。ResultSet内を,順方向,逆方向にスクロールできます。また,現在の位置からの相対位置指定の移動,絶対位置への移動もできます。

    「非反映型」とは,ResultSetが開かれている間に加えられた変更が,そのResultSetに反映されないことを意味します。つまり,基盤となるデータの静的なビューを提供するだけで,ResultSetに含まれる行,その順序,および列の値は,ResultSetの作成時に固定されます。

  • スクロール反映型

    JDBC2.0で導入されたスクロールタイプです。DABroker Libraryではサポートしていません。ResultSetが開かれている間に加えられた変更が,そのResultSetに反映される点がスクロール非反映型とは異なります。

    「変更の反映」という点では,「そのResultSet自身による変更の反映」,「同一トランザクション内での,ほかのResultSetでの変更の反映」,「ほかのトランザクションによる変更の反映」などがありますが,どこまで保証するかはドライバの実装レベル,およびDBMSのトランザクション遮断レベルに依存します。

(b) 並行処理タイプ

ResultSetの並行処理タイプには,次の種類があります。

  • 読み取り専用型

    JDBC1.0からの標準の並行処理タイプです。ResultSetからの更新はできません。

  • 更新可能型

    JDBC2.0で導入された並行処理タイプです。ResultSetからの更新(UPDATE,INSERT,DELETE)ができます。DABroker Libraryではサポートしていません。

(c) ResultSetタイプ

スクロールタイプと並行処理タイプを組み合わせることで,ResultSetには6種類のタイプがあります。DABroker Libraryでは,このうち2種類をサポートしています。ResultSetタイプは,ConnectionクラスのcreateStatementメソッド,prepareStatementメソッド,またはprepareCallメソッドで,Statementクラス(またはそのサブクラス)のインスタンスを取得する時に指定します。

6種類のResultSetタイプとDABroker Libraryでのサポートを,次の表に示します。

表18‒35 ResultSetのタイプ

ResultSetタイプ

DABroker Libraryでのサポート

スクロールタイプ

並行処理タイプ

順方向専用型

読み取り専用型

○

更新可能型

×

スクロール非反映型

読み取り専用型

○

更新可能型

×

スクロール反映型

読み取り専用型

×

更新可能型

×

(凡例)

○:サポートしている

×:サポートしていない

サポートしていないResultSetタイプが指定された場合,エラーにはしないで,指定されたResultSetタイプにいちばん近いResultSetタイプを使用してStatementクラス(またはそのサブクラス)のインスタンスを生成します。また,警告メッセージをConnectionクラスのSQLWarningに格納します。

更新可能型の並行処理タイプはサポートしていないため,ResultSetクラスに使用できないメソッドがあります。これらの使用できないメソッドが呼び出された場合は,無条件にSQLExceptionをthrowします。どのメソッドが使用できないかについては,「18.16 ResultSetクラス」を参照してください。

(d) スクロール型ResultSet使用時の注意点

スクロール型ResultSetでは,DABroker Library内ですべての検索データをキャッシングします。データ量が大量な場合は,メモリ不足や性能劣化が発生する可能性が大きくなります。このため,スクロール型ResultSetを使用する場合は,「SQLに条件を付加する」,「StatementクラスのsetMaxRowsメソッドを呼び出す」など,検索データ量をあらかじめ抑制してください。

(2) バッチ更新

JDBC2.0基本規格では,Statementクラス,PreparedStatementクラス,およびCallableStatementクラスにバッチ更新機能が追加されています。バッチ更新機能を使うと,複数のSQL,または複数のパラメタ値を登録し,一括で実行できます。

注意

バッチ更新機能を使用する場合,ConnectionクラスのAUTOコミットモードをOFFにしてください。これは,バッチ更新の途中でエラーが発生した場合,そのトランザクションの有効・無効をアプリケーション側で制御する必要があるためです。AUTOコミットモードがON(初期状態)の場合,バッチ更新の途中でエラーが発生しても,エラーが発生する一つ前までのSQL実行は有効となるため,注意が必要です。アプリケーションサーバでJTAトランザクションを使用している場合,AUTOコミットモードはOFFになります。

(a) Statementクラスでのバッチ更新

概要
  • 複数の更新系SQLをaddBatchメソッドで登録します。

  • 登録した更新系SQLを,executeBatchメソッドを使用して一括で実行します。

  • 一括実行の結果として,それぞれの更新系SQLによって更新された行数の配列を返します。

  • 一括実行の途中でエラーが発生した場合,BatchUpdateExceptionをthrowします。

  • 登録したSQL中に検索系SQLがある場合,executeBatchメソッド呼び出し時にBatchUpdateExceptionをthrowします。

注意事項

DABrokerとのインタフェース上,複数のSQLを一括実行できないため,DABroker Libraryでは,登録されたSQLを逐次実行することでバッチ更新を実現しています。

(b) PreparedStatementクラスでのバッチ更新

概要
  • PreparedStatementインスタンス生成時に指定した,更新系SQLに対する?パラメタを,通常の手順(setXXXメソッド)で設定します。

  • addBatchメソッドで,?パラメタのセットを登録します。

  • 登録した複数セットの?パラメタを,executeBatchメソッドで一括実行します。

  • 一括実行の結果として,それぞれの?パラメタのセットで更新された行数の配列を返します。

  • 一括実行の途中でエラーが発生した場合,BatchUpdateExceptionをthrowします。

  • PreparedStatementインスタンス生成時に指定したSQLが検索系SQLである場合,executeBatchメソッド呼び出し時にBatchUpdateExceptionをthrowします。

注意事項

定義系および制御系SQLについては,addBatchメソッドを実行しないでください。

(c) CallableStatementクラスでのバッチ更新

概要
  • CallableStatementインスタンス生成時に指定した,SQLに対する?パラメタを,通常の手順(setXXXメソッド)で設定します。

  • addBatchメソッドで,入力パラメタのセットを登録します。

  • 登録した複数セットの入力パラメタを,executeBatchメソッドで一括実行します。

  • 一括実行の結果として,それぞれの入力パラメタのセットで実行された,SQLの返却値(更新行数)の配列を返します。

  • 一括実行の途中でエラーが発生した場合,BatchUpdateExceptionをthrowします。

  • CallableStatementインスタンス生成時に指定したSQLが更新行数を返さない場合,および出力パラメタか入出力パラメタを持つ場合,executeBatchメソッド呼び出し時にBatchUpdateExceptionをthrowします。

注意事項

定義系および制御系SQLについては,addBatchメソッドを実行しないでください。

(d) HiRDBの場合のバッチ更新

HiRDBの場合のバッチ更新処理は,次の2種類に分けられます。

  • 逐次実行

    複数のSQLに分けて実行する更新処理です。

  • 一括実行

    HiRDBの配列更新機能を使用して実行する更新処理です。

HiRDBの配列更新機能とは,データベースにより提供される次の機能を指します。

  • HiRDBの配列を使用したINSERT機能

  • HiRDBの配列を使用したUPDATE機能

  • HiRDBの配列を使用したDELETE機能

  • HiRDBクライアント経由XDM/RD E2で使用するXDM/RD E2の配列を使用したINSERT機能

  • HiRDBクライアント経由XDM/RD E2で使用するXDM/RD E2の配列を使用したUPDATE機能

  • HiRDBクライアント経由XDM/RD E2で使用するXDM/RD E2の配列を使用したDELETE機能

HiRDBの配列更新機能では,複数の?パラメタセットを配列形式で扱い,一度に処理することができます。そのため,データベースとの通信回数が減り,大量のデータを高速に更新できます。

HiRDBの配列更新機能を使用するには,BlockUpdate設定をtrueにします。ただし,接続するHiRDBのバージョンによって使用できない場合があります。HiRDBの配列更新機能の詳細については,マニュアル「HiRDB UAP開発ガイド」およびマニュアル「HiRDB SQLリファレンス」を参照してください。

  • addBatchメソッド−executeBatchメソッド使用時の仕様

    次に,バッチ更新時に使用するaddBatchメソッド−executeBatchメソッド使用時の仕様を,BlockUpdate設定がtrueの場合とfalseの場合に分けて示します。

    表18‒36 addBatchメソッド−executeBatchメソッド使用時の仕様(BlockUpdate設定がtrue,HiRDBの場合)

    実行するSQL文

    DABrokerの仕様(処理方法)

    HiRDB Version 6

    HiRDB Version 7 07-00以降かつ07-00-/K以前

    HiRDB Version 7 07-00-/L以降かつHiRDB Version 7 07-01未満

    HiRDB Version 7 07-01以降

    INSERT文

    (VALUES句指定)

    逐次実行

    一括実行

    一括実行

    一括実行

    INSERT文

    (SELECT句指定)

    逐次実行

    KFPA19408-E

    逐次実行

    一括実行

    UPDATE文

    逐次実行

    KFPA19408-E

    逐次実行

    一括実行

    DELETE文

    逐次実行

    KFPA19408-E

    逐次実行

    一括実行

    CALL文(OUTまたはINOUTパラメタあり)

    KFDJ00010-E

    KFDJ00010-E

    KFDJ00010-E

    KFDJ00010-E

    CALL文(INパラメタだけ)

    逐次実行

    逐次実行

    逐次実行

    逐次実行

    (凡例)

    一括実行:HiRDBの配列更新機能を使用してSQLを一括実行する

    逐次実行:HiRDBの配列更新機能を使用しないでSQLを分けて実行する

    KFPA19408-E:エラー(KFPA19408-E)が発生する。HiRDBの配列更新機能は使用できない

    KFDJ00010-E:エラー(KFDJ00010-E)が発生する。JDBC2.0規格では,executeBatchメソッドで更新行数を返さないもの(SELECTなど)が含まれていた場合,例外となる

    表18‒37  addBatchメソッド−executeBatchメソッド使用時の仕様(BlockUpdate設定がfalseまたは指定なし,HiRDBの場合)

    実行するSQL文

    DABrokerの仕様(処理方法)

    INSERT文(VALUES句指定)

    逐次実行

    INSERT文(SELECT句指定)

    逐次実行

    UPDATE文

    逐次実行

    DELETE文

    逐次実行

    SELECT文

    KFDJ00010-E

    CALL文(OUTまたはINOUTパラメタあり)

    KFDJ00010-E

    CALL文(INパラメタだけ)

    逐次実行

    (凡例)

    逐次実行:HiRDBの配列更新機能を使用しないでSQLを分けて実行する

    KFDJ00010-E:エラー(KFDJ00010-E)が発生する。JDBC2.0規格では,executeBatchメソッドで更新行数を返さないもの(SELECTなど)が含まれていた場合,例外となる

    表18‒38 addBatchメソッド−executeBatchメソッド使用時の仕様(BlockUpdate設定がtrue,HiRDBクライアント経由XDM/RD E2の場合)

    実行するSQL

    DABrokerの仕様(処理方式)

    HiRDBクライアント08-02未満

    HiRDBクライアント08-02以降

    XDM/RD E2(11-03未満)

    XDM/RD E2(11-03以降)

    INSERT文(VALUES句指定)

    逐次実行

    逐次実行

    一括実行

    INSERT文(SELECT句指定)

    逐次実行

    逐次実行

    一括実行

    UPDATE文

    逐次実行

    逐次実行

    一括実行

    DELETE文

    逐次実行

    逐次実行

    一括実行

    SELECT文

    KFDJ00010-E

    KFDJ00010-E

    KFDJ00010-E

    CALL文(OUT,またはINOUTパラメタ有)

    KFDJ00010-E

    KFDJ00010-E

    KFDJ00010-E

    CALL文(INパラメタだけ)

    逐次実行

    逐次実行

    逐次実行

    (凡例)

    一括実行:HiRDBの配列更新機能を使用してSQLを一括実行する

    逐次実行:HiRDBの配列更新機能を使用しないでSQLを分けて実行する

    KFDJ00010-E:エラー(KFDJ00010-E)が発生する。JDBC2.0規格では,executeBatchメソッドで更新行数を返さないもの(SELECTなど)が含まれている場合,例外となる

    表18‒39 addBatchメソッド−executeBatchメソッド使用時の仕様(BlockUpdate設定がfalseまたは指定なし,HiRDBクライアント経由XDM/RD E2の場合)

    実行するSQL文

    DABrokerの仕様

    INSERT文(VALUES句指定)

    逐次実行

    INSERT文(SELECT句指定)

    逐次実行

    UPDATE文

    逐次実行

    DELETE文

    逐次実行

    SELECT文

    KFDJ00010-E

    CALL文(OUT,またはINOUTパラメタあり)

    KFDJ00010-E

    CALL文(INパラメタだけ)

    逐次実行

    (凡例)

    逐次実行:HiRDBの配列更新機能を使用しないでSQLを分けて実行する

    KFDJ00010-E:エラー(KFDJ00010-E)が発生する。JDBC2.0規格では,executeBatchメソッドで更新行数を返さないもの(SELECTなど)が含まれている場合,例外となる

  • HiRDBの配列更新機能の使用方法

    HiRDBの配列更新機能の使用方法を次に示します。

    • BlockUpdate設定をtrueにします。

      Connect時に,プロパティとしてBLOCK_UPDATE=TRUEを指定するか(DataSourceを使用する場合はsetBlockUpdate(true)),JdbcDbpsvPreparedStatementのsetBlockUpdate(true)を指定します。

    • パラメタが一つ以上あるSQLを前処理します。

    • PreparedStatementクラス,またはCallableStatementクラスのsetメソッドで,?パラメタに対する値を設定します。

    • addBatchメソッドで,?パラメタセットを追加します。

    • executeBatchメソッドで,バッチ更新を実行します。

  • HiRDBの配列更新機能使用時の注意事項

    • 共通項目

      サポートするHiRDB全バージョン共通の注意事項を次に示します。

      ●HiRDBの配列更新機能を使用するには,接続時のプロパティ情報,またはデータソースのBlockUpdateをtrueで設定するか,PreparedStatementのsetBlockUpdateメソッドをtrueに設定する必要があります。

      ●HiRDBの配列更新機能は,?パラメタを持つSQL文に対して有効です。プロシジャやStatementクラスのaddBatch(String sql)を使用した場合は有効となりません。

      ●パラメタセットを登録する場合,PreparedStatement,またはCallableStatementのaddBatchメソッドを使用してください。StatementのaddBatch(String sql)を使用するとエラーになります。

      ●HiRDBの配列更新機能は,addBatchメソッドで登録したパラメタセットが2件以上ある場合に有効です。1件の場合はHiRDBの配列更新機能を使用しないで実行されます。

      ●実行するSQLには,?パラメタが一つ以上必要です。?パラメタがない場合,HiRDBの配列更新機能は使用されないで,逐次実行されます。

      ●XA環境下のHiRDBに接続してバッチ更新を実行する場合,setAutoCommit(false)を設定する必要があります。setAutoCommit(false)を設定しないで実行するとHiRDBでエラーになります。

      ●DECIMAL型データをパラメタセットに設定する場合,配列に指定するDECIMAL型データの精度,および位取りはHiRDBの表定義属性に合わせられます。整数部のけた数がHiRDBの表定義の整数部のけた数より大きいと,けたあふれが発生してエラーになります。

      ●SMALLINT型,INTEGER型,またはDECIMAL型の列に,setInt,またはsetStringを使用して範囲外のデータを設定するとエラーになります。

      ●配列更新の途中でエラーが発生した場合,エラーが発生する直前までの実行もすべて無効になります。

      ●?パラメタにHiRDBの繰り返し列(複数要素を格納できる列)を指定している場合,HiRDBの配列更新機能は使用されないで,逐次実行されます。

      ●setNullメソッドで,HiRDBの表定義の列属性がCHAR,NCHAR,MCHAR,DATE,TIME,またはTIMESTAMPの場合,列属性と同じjava.sql.Typesを指定していると,HiRDBの配列更新機能は使用されないで,逐次実行されます。

      ●setNullメソッドで,HiRDBの表定義の列属性と異なるjava.sql.Typesを指定している場合,HiRDBの配列更新機能は使用されないで,逐次実行されます。ただし,次の場合は,HiRDBの配列更新機能が実行されます。

      ・HiRDBの表定義の列属性がCHAR,NCHAR,またはMCHARで,java.sql.Typesにjava.sqlTypes.VARCHARを指定した場合

      ・HiRDBの表定義の列属性がDATE,TIME,またはTIMESTAMPで,java.sql.Typesにjava.sql.Types.CHARを指定した場合

    • HiRDBのバージョンが07-00の場合の注意事項

      HiRDBのバージョンが07-00の場合,次に示すバージョン固有の注意事項があります。共通項目と合わせて注意してください。

      ・HiRDBのバージョンが07-00の場合,使用できるHiRDBの配列更新機能は,「配列を使用したINSERT機能(INSERT VALUE句だけ)」です。「配列を使用したINSERT機能(INSERT VALUE句以外)」,「配列を使用したUPDATE機能」,および「配列を使用したDELETE機能」は使用できません。

      ・?パラメタにHiRDBのBLOB型の列,または定義長32,001バイト以上のBINARY型の列を指定している場合,HiRDBの配列更新機能は使用されないで,逐次実行されます。

      ・WITH DEFAULT指定のBLOB型の列,またはWITH DEFAULT指定で定義長32,001バイト以上のBINARY型の列の場合,HiRDBの配列更新機能は使用されないで,逐次実行されます。

      ・HiRDBの行単位トリガを定義した表に対して更新する場合,HiRDBの配列更新機能は使用されないで,逐次実行されます。

    • HiRDBのバージョンが07-01以降の場合の注意事項

      HiRDBのバージョンが07-01以降の場合,次に示すバージョン固有の注意事項があります。共通項目と合わせて注意してください。

      ・「配列を使用したINSERT機能」,「配列を使用したUPDATE機能」,および「配列を使用したDELETE機能」が使用できます。

      ・?パラメタにデータ長が32,001バイト以上のBINARYデータを指定している場合,HiRDBの配列更新機能は使用されないで,逐次実行されます。

      ・HiRDBのBLOB型列に対して32,001バイト以上のデータを指定している場合,HiRDBの配列更新機能は使用され,逐次実行されます。

(e) Oracleの場合のバッチ更新

ここでは,Oracleの場合のバッチ更新について説明します。

  • addBatchメソッド−executeBatchメソッド使用時の仕様

    次に,PreparedStatementおよびCallableStatementでのaddBatchメソッド−executeBatchメソッド使用時の仕様を,BlockUpdate設定がtrueの場合,falseの場合に分けて示します。

    表18‒40  addBatchメソッド−executeBatchメソッド使用時の仕様(BlockUpdate設定がtrue,Oracleの場合)

    実行するSQL文

    DABrokerの仕様(処理方法)

    INSERT文(VALUES句指定)

    逐次実行

    INSERT文(SELECT句指定)

    逐次実行

    UPDATE文

    逐次実行

    DELETE文

    逐次実行

    SELECT文

    KFDJ00010-E

    BEGIN文(OUTまたはINOUTパラメタあり)

    KFDJ00010-E

    BEGIN文(INパラメタだけ)

    逐次実行

    (凡例)

    逐次実行:SQLを分けて実行する

    KFDJ00010-E:エラー(KFDJ00010-E)が発生する。JDBC2.0規格では,executeBatchメソッドで更新行数を返さないもの(SELECTなど)が含まれていた場合,例外となる

    表18‒41  addBatchメソッド−executeBatchメソッド使用時の仕様(BlockUpdate設定がfalseまたは指定なし,Oracleの場合)

    実行するSQL文

    DABrokerの仕様(処理方法)

    INSERT文(VALUES句指定)

    逐次実行

    INSERT文(SELECT句指定)

    逐次実行

    UPDATE文

    逐次実行

    DELETE文

    逐次実行

    SELECT文

    KFDJ00010-E

    BEGIN文(OUTまたはINOUTパラメタあり)

    KFDJ00010-E

    BEGIN文(INパラメタだけ)

    逐次実行

    (凡例)

    逐次実行:SQLを分けて実行する

    KFDJ00010-E:エラー(KFDJ00010-E)が発生する。JDBC2.0規格では,executeBatchメソッドで更新行数を返さないもの(SELECTなど)が含まれていた場合,例外となる

  • addBatchメソッド使用時の注意事項

    • 実行するSQLに?パラメタを一つ以上含めてください。

    • 配列に指定するデータ型が異なる場合にはエラーとなります。

    • アプリケーションサーバから使用する場合は,PreparedStatementクラスのsetBlockUpdateメソッドは使用できません。

(3) JDBC SQLタイプの扱い

JDBC2.0基本規格では,幾つかの新しいJDBC SQLタイプが追加されています。追加されたJDBC SQLタイプとDABroker Libraryでのサポートを,次の表に示します。

表18‒42  追加されたJDBC SQLタイプとDABroker Libraryでのサポート

追加されたJDBC SQLタイプ

DABroker Libraryでのサポート

BLOB

○

CLOB

△

ARRAY

×

REF

×

DISTINCT

×

STRUCT

×

JAVA OBJECT

×

(凡例)

○:Oracle9i,Oracle10g,およびHiRDBでサポートしている

△:Oracle9i,およびOracle10gでだけサポートしている

×:サポートしていない

(a) 検索データ取得時のデータ変換

追加されたJDBC SQLタイプと,ResultSetクラスのgetXXXメソッドとのデータ変換について,次の表に示します。変換できないJDBC SQLタイプに対してgetXXXメソッドが呼び出された場合は,SQLExceptionをthrowします。接続データベースがどのJDBC SQLタイプをサポートしているかは,「18.7.7 データ型の対応」を参照してください。

なお,JDBC2.0規格ではgetUnicodeStreamメソッドが推奨されないメソッドとなったため,代わりにgetCharacterStreamが追加されています。

表18‒43  ResultSetクラスのgetXXXメソッドとJDBC SQLタイプとのデータ変換 (1)

getXXXメソッド

JDBC SQLタイプ

B

I

T

T

I

N

Y

I

N

T

S

M

A

L

L

I

N

T

I

N

T

E

G

E

R

B

I

G

I

N

T

F

L

O

A

T

R

E

A

L

D

O

U

B

L

E

N

U

M

E

R

I

C

D

E

C

I

M

A

L

C

H

A

R

V

A

R

C

H

A

R

L

O

N

G

V

A

R

C

H

A

R

getByte

○

◎

○

○

○

○

○

○

○

○

○

○

○

getShort

○

○

◎

○

○

○

○

○

○

○

○

○

○

getInt

○

○

○

◎

○

○

○

○

○

○

○

○

○

getLong

○

○

○

○

◎

○

○

○

○

○

○

○

○

getFloat

○

○

○

○

○

○

◎

○

○

○

○

○

○

getDouble

○

○

○

○

○

◎

○

◎

○

○

○

○

○

getBigDecimal

○

○

○

○

○

○

○

○

◎

◎

■

○

○

getBoolean

◎

○

○

○

○

○

○

○

○

○

○

○

○

getString

○

○

○

○

○

○

○

○

○

○

◎

◎

○

getBytes

−

−

−

−

−

−

−

−

−

−

−

−

−

getDate※1

−

−

−

−

−

−

−

−

−

−

○

○

○

getTime※1

−

−

−

−

−

−

−

−

−

−

○

○

○

getTimestamp※1

−

−

−

−

−

−

−

−

−

−

○

○

○

getAsciiStream

−

−

−

−

−

−

−

−

−

−

○

○

◎

getUnicodeStream

−

−

−

−

−

−

−

−

−

−

○

○

◎

getBinaryStream

−

−

−

−

−

−

−

−

−

−

−

−

−

getObject

○

○

○

○

○

○

○

○

○

○

○

○

○

getCharacter

Stream

−

−

−

−

−

−

−

−

−

−

○

○

◎

getArray

(未サポート)

−

−

−

−

−

−

−

−

−

−

−

−

−

getBlob※2

−

−

−

−

−

−

−

−

−

−

−

−

−

getClob※3

−

−

−

−

−

−

−

−

−

−

−

−

−

getRef

(未サポート)

−

−

−

−

−

−

−

−

−

−

−

−

−

(凡例)

◎:完全に変換できる

○:変換できる。ただし,変換元のデータの内容によってはデータの欠落や変換エラーとなることがある

■:設定値が定義長に満たない場合,エラーが発生する

−:変換できない

注※1

引数にjava.util.Calendarオブジェクトを指定するgetDate,getTimeおよびgetTimestampメソッドを実行すると,データベースに格納されたデータが指定したjava.util.Calendarオブジェクトのタイムゾーンであるとして,実行しているアプリケーションのデフォルトのタイムゾーンに変換して取得します。

注※2

Oracle9i,Oracle10g,およびHiRDBでサポートしています。

注※3

Oracle9i,およびOracle10gでサポートしています。

表18‒44  ResultSetクラスのgetXXXメソッドとJDBC SQLタイプとのデータ変換 (2)

getXXXメソッド

JDBC SQLタイプ

D

A

T

E

T

I

M

E

T

I

M

E

S

T

A

M

P

B

I

N

A

R

Y

V

A

R

B

I

N

A

R

Y

L

O

N

G

V

A

R

B

I

N

A

R

Y

J

A

V

A

O

B

J

E

C

T

S

T

R

U

C

T

A

R

R

A

Y

B

L

O

B

C

L

O

B

R

E

F

getByte

−

−

−

−

−

−

−

−

−

−

−

−

getShort

−

−

−

−

−

−

−

−

−

−

−

−

getInt

−

−

−

−

−

−

−

−

−

−

−

−

getLong

−

−

−

−

−

−

−

−

−

−

−

−

getFloat

−

−

−

−

−

−

−

−

−

−

−

−

getDouble

−

−

−

−

−

−

−

−

−

−

−

−

getBigDecimal

−

−

−

−

−

−

−

−

−

−

−

−

getBoolean

−

−

−

−

−

−

−

−

−

−

−

−

getString

○

○

○

○

○

○

−

−

−

−

−

−

getBytes

−

−

−

◎

◎

○

−

−

−

−

−

−

getDate※1

◎

−

○

−

−

−

−

−

−

−

−

−

getTime※1

−

◎

○

−

−

−

−

−

−

−

−

−

getTimestamp※1

○

−

◎

−

−

−

−

−

−

−

−

−

getAsciiStream

−

−

−

○

○

○

−

−

−

−

−

−

getUnicodeStream

−

−

−

○

○

○

−

−

−

−

−

−

getBinaryStream

−

−

−

○

○

◎

−

−

−

−

−

−

getObject

○

○

○

○

○

○

▲

▲

△

▼

▼

△

getCharacter

Stream

−

−

−

○

○

○

−

−

−

−

−

−

getArray

(未サポート)

−

−

−

−

−

−

−

−

▲

−

−

−

getBlob※2

−

−

−

−

−

○※4

−

−

−

●

−

−

getClob※3

−

−

−

−

−

−

−

−

−

−

●

−

getRef

(未サポート)

−

−

−

−

−

−

−

−

−

−

−

▲

(凡例)

◎:完全に変換できる

○:変換できる。ただし,変換元のデータの内容によってはデータの欠落や変換エラーとなることがある

●:完全に変換できる組み合わせは,接続するデータベースがOracle9iまたはOracle10gの場合以外では,JDBC SQLタイプが未サポートのため使えない

▼:変換できる組み合わせは,接続するデータベースがOracle9iまたはOracle10gの場合以外では,JDBC SQLタイプが未サポートのため使えない

▲:完全に変換できる組み合わせは,JDBC SQLタイプが未サポートのため使えない

△:変換できる組み合わせは,JDBC SQLタイプが未サポートのため使えない

−:変換できない

注※1

引数にjava.util.Calendarオブジェクトを指定するgetDate,getTimeおよびgetTimestampメソッドを実行すると,データベースに格納されたデータが指定したjava.util.Calendarオブジェクトのタイムゾーンであるとして,実行しているアプリケーションのデフォルトのタイムゾーンに変換して取得します。

注※2

Oracle9i,Oracle10g,およびHiRDBでサポートしています。

注※3

Oracle9i,およびOracle10gでサポートしています。

注※4

HiRDBでだけサポートしています。

(b) ?パラメタ設定時のデータ変換

追加されたJDBC SQLタイプと,PreparedStatementクラスのsetXXXメソッドとのデータ変換について,次の表に示します。JDBC SQLタイプをサポートしていない場合,setXXXメソッドはSQLExceptionをthrowします。接続データベースがどのJDBC SQLタイプをサポートしているかは,「18.7.7 データ型の対応」を参照してください。

なお,JDBC2.0規格では,setUnicodeStreamメソッドが推奨されないメソッドとなったため,代わりにsetCharacterStreamが追加されています。

表18‒45  追加されたJDBC SQLタイプとsetXXXメソッド

setXXXメソッド

データ変換されるJDBC SQLタイプ

setCharacterStream

CHAR,VARCHAR,またはLONGVARCHAR

setRef(未サポート)

REF

setBlob※1

BLOB,LONGVARBINARY

setClob※2

CLOB

setArray(未サポート)

ARRAY

注※1

Oracle9i,Oracle10g,およびHiRDBでサポートしています。

注※2

Oracle9i,およびOracle10gでサポートしています。

表18‒46  setXXXメソッドとJDBC SQLタイプとのデータ変換 (1)

setXXXメソッド

JDBC SQLタイプ

B

I

T

T

I

N

Y

I

N

T

S

M

A

L

L

I

N

T

I

N

T

E

G

E

R

B

I

G

I

N

T

F

L

O

A

T

R

E

A

L

D

O

U

B

L

E

N

U

M

E

R

I

C

D

E

C

I

M

A

L

C

H

A

R

V

A

R

C

H

A

R

L

O

N

G

V

A

R

C

H

A

R

setByte

○

◎

○

○

○

○

○

○

○

○

○

○

○

setShort

○

○

◎

○

○

○

○

○

○

○

○

○

○

setInt

○

○

○

◎

○

○

○

○

○

○

○

○

○

setLong

○

○

○

○

◎

○

○

○

○

○

○

○

○

setFloat

○

○

○

○

○

○

◎

○

○

○

○

○

○

setDouble

○

○

○

○

○

◎

○

◎

○

○

○

○

○

setBigDecimal

○

○

○

○

○

○

○

○

◎

◎

○

○

○

setBoolean

◎

○

○

○

○

○

○

○

○

○

○

○

○

setString

○

○

○

○

○

○

○

○

○

○

◎

◎

○

setBytes

−

−

−

−

−

−

−

−

−

−

−

−

−

setDate

−

−

−

−

−

−

−

−

−

−

○

○

○

setTime

−

−

−

−

−

−

−

−

−

−

○

○

○

setTimestamp

−

−

−

−

−

−

−

−

−

−

○

○

○

setAsciiStream

−

−

−

−

−

−

−

−

−

−

○※4

○※4

○※4

setUnicodeStream※1

−

−

−

−

−

−

−

−

−

−

○

○

○

setBinaryStream

−

−

−

−

−

−

−

−

−

−

−

−

−

setObject

○

○

○

○

○

○

○

○

○

○

○

○

○

setCharacterStream

−

−

−

−

−

−

−

−

−

−

○※5

○※5

○※5

setArray

(未サポート)

−

−

−

−

−

−

−

−

−

−

−

−

−

setBlob※2

−

−

−

−

−

−

−

−

−

−

−

−

−

setClob※3

−

−

−

−

−

−

−

−

−

−

−

−

−

setRef

(未サポート)

−

−

−

−

−

−

−

−

−

−

−

−

−

(凡例)

◎:完全に変換できる

○:変換できる。ただし,変換元のデータの内容によってはデータの欠落や変換エラーとなることがある

−:変換できない

注※1

Oracle9i,Oracle10g,およびHiRDBでサポートしています。

注※2

Oracle9i,およびOracle10gでサポートしています。

注※3

長さが0のデータを設定するとエラーになります。

注※4

接続データベースがOracleの場合,長さが0のデータを設定すると,NULL値に変換します。

注※5

java.io.Readerオブジェクトから取得できるデータの長さが引数で指定した長さより短い場合,次のように引数で指定した長さまで0を補完します。

[図データ]

表18‒47  setXXXメソッドとJDBC SQLタイプとのデータ変換(2)

setXXXメソッド

JDBC SQLタイプ

D

A

T

E

T

I

M

E

T

I

M

E

S

T

A

M

P

B

I

N

A

R

Y

V

A

R

B

I

N

A

R

Y

L

O

N

G

V

A

R

B

I

N

A

R

Y

J

A

V

A

O

B

J

E

C

T

S

T

R

U

C

T

A

R

R

A

Y

B

L

O

B

C

L

O

B

R

E

F

setByte

−

−

−

−

−

−

−

−

−

−

−

−

setShort

−

−

−

−

−

−

−

−

−

−

−

−

setInt

−

−

−

−

−

−

−

−

−

−

−

−

setLong

−

−

−

−

−

−

−

−

−

−

−

−

setFloat

−

−

−

−

−

−

−

−

−

−

−

−

setDouble

−

−

−

−

−

−

−

−

−

−

−

−

setBigDecimal

−

−

−

−

−

−

−

−

−

−

−

−

setBoolean

−

−

−

−

−

−

−

−

−

−

−

−

setString

○

○

○

○

○

○

−

−

−

−

−

−

setBytes

−

−

−

◎

◎

○

−

−

−

−

−

−

setDate

◎

−

○

−

−

−

−

−

−

−

−

−

setTime

−

◎

○

−

−

−

−

−

−

−

−

−

setTimestamp

○

−

◎

−

−

−

−

−

−

−

−

−

setAsciiStream

−

−

−

○

○※4

○※4

−

−

−

−

−

−

setUnicodeStream※3

−

−

−

○

○

○

−

−

−

−

−

−

setBinaryStream

−

−

−

○

○※4

○※4

−

−

−

−

−

−

setObject

○

○

○

○

○

○

▲

▲

△

▼

▼

△

setCharacterStream

−

−

−

○※5

○※5

○※5

−

−

−

−

−

−

setArray(未サポート)

−

−

−

−

−

−

−

−

▲

−

−

−

setBlob※1

−

−

−

−

−

○※1

−

−

−

●※2※4

−

−

setClob※2

−

−

−

−

−

−

−

−

−

−

●※4

−

setRef(未サポート)

−

−

−

−

−

−

−

−

−

−

−

▲

(凡例)

◎:完全に変換できる

○:変換できる。ただし,変換元のデータの内容によってはデータの欠落や変換エラーとなることがある

●:完全に変換できる組み合わせは,接続するデータベースがOracle9iまたはOracle10gの場合以外では,JDBC SQLタイプが未サポートのため使えない

▼:変換できる組み合わせは,接続するデータベースがOracle9iまたはOracle10gの場合以外では,JDBC SQLタイプが未サポートのため使えない

▲:完全に変換できる組み合わせは,JDBC SQLタイプが未サポートのため使えない

△:変換できる組み合わせは,JDBC SQLタイプが未サポートのため使えない

−:変換できない

注※1

Oracle9i,Oracle10g,およびHiRDBでサポートしています。

注※2

Oracle9i,およびOracle10gでサポートしています。

注※3

長さが0のデータを設定するとエラーになります。

注※4

接続データベースがOracleである場合,長さが0であるデータを設定するとNULL値に変換します。

注※5

java.io.Readerオブジェクトから取得できるデータの長さが引数で指定した長さより短い場合,次のように引数で指定した長さまで0を補完します。

[図データ]