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を補完します。

[図データ]