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でのサポートを,次の表に示します。
ResultSetタイプ |
DABroker Libraryでのサポート |
|
---|---|---|
スクロールタイプ |
並行処理タイプ |
|
順方向専用型 |
読み取り専用型 |
○ |
更新可能型 |
× |
|
スクロール非反映型 |
読み取り専用型 |
○ |
更新可能型 |
× |
|
スクロール反映型 |
読み取り専用型 |
× |
更新可能型 |
× |
- (凡例)
-
○:サポートしている
×:サポートしていない
サポートしていないResultSetタイプが指定された場合,エラーにはしないで,指定されたResultSetタイプにいちばん近いResultSetタイプを使用してStatementクラス(またはそのサブクラス)のインスタンスを生成します。また,警告メッセージをConnectionクラスのSQLWarningに格納します。
更新可能型の並行処理タイプはサポートしていないため,ResultSetクラスに使用できないメソッドがあります。これらの使用できないメソッドが呼び出された場合は,無条件にSQLExceptionをthrowします。どのメソッドが使用できないかについては,「18.16 ResultSetクラス」を参照してください。
(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でのサポートを,次の表に示します。
追加された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が追加されています。
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でサポートしています。
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が追加されています。
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でサポートしています。
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を補完します。
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を補完します。