Hitachi

ノンストップデータベース HiRDB Version 10 UAP開発ガイド


17.11.3 ?パラメタ設定時のマッピング

PreparedStatementクラス,及びCallableStatementクラスのsetXXXメソッドと,マッピングされるJDBC SQLタイプを次の表に示します。使用できないJDBC SQLタイプの場合,setXXXメソッドはSQLExceptionを投入します。

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

表17‒106 setXXXメソッドと,マッピングされるJDBC SQLタイプ

PreparedStatementクラスのsetXXXメソッド

マッピングされるJDBC SQLタイプ

setCharacterStream

CHAR,VARCHAR

setRef

REF

setBlob

LONGVARBINARY

setClob

CLOB

setArray

ARRAY

注※

JDBCドライバでは使用できません。

PreparedStatementクラス,及びCallableStatementクラスのsetXXXメソッドと各JDBC SQLタイプとのマッピングを次の表に示します。

表17‒107 setXXXメソッドとJDBCのSQLデータ型とのマッピング(1/2)

setXXXメソッド

JDBCのSQLデータ型

SMALLINT

INTEGER

FLOAT

REAL

DECIMAL※3

CHAR

setByte

setShort

setInt

setLong

setFloat

setDouble

setBigDecimal

setBoolean

setString

setBytes

×

×

×

×

×

×

setDate

×

×

×

×

×

setTime

×

×

×

×

×

setTimestamp※1

×

×

×

×

×

setAsciiStream

×

×

×

×

×

setBinaryStream

×

×

×

×

×

×

setObject※2

setCharacterStream

×

×

×

×

×

※4

setArray

×

×

×

×

×

×

setBlob

×

×

×

×

×

×

表17‒108 setXXXメソッドとJDBCのSQLデータ型とのマッピング(2/2)

setXXXメソッド

JDBCのSQLデータ型

VARCHAR

DATE

TIME

TIMESTAMP

LONGVARBINARY

ARRAY

OTHER※6

setByte

×

×

×

×

×

setShort

×

×

×

×

×

setInt

×

×

×

×

×

setLong

×

×

×

×

×

setFloat

×

×

×

×

×

setDouble

×

×

×

×

×

setBigDecimal

×

×

×

×

×

setBoolean

×

×

×

×

×

setString

×

setBytes

×

×

×

×

×

setDate

※5

×

×

×

setTime

×

×

×

setTimestamp※1

×

×

setAsciiStream

×

×

×

×

setBinaryStream

×

×

×

×

×

setObject※2

×

setCharacterStream

※4

×

×

×

※4

×

setArray

×

×

×

×

×

×

setBlob

×

×

×

×

×

(凡例)

◎:マッピングすることを推奨します。

○:マッピングできます。ただし,変換元データの形式によっては,データの欠落や変換エラーとなることがあるため,注意してください。

×:マッピングできません。

注※1

HiRDBデータ型であるTIMESTAMP型の?パラメタに対してsetXXXメソッドで値を指定する場合に,?パラメタの小数秒精度と値の小数秒精度が一致していない場合の動作を次に示します。

  • ?パラメタの小数秒精度よりも大きい場合:切り捨てます。

  • ?パラメタの小数秒精度よりも小さい場合:拡張します。

注※2

setObjectメソッドにInputStreamクラス及びReaderクラス(サブクラスを含む)のオブジェクトは指定できません。

注※3

HiRDBデータ型であるDECIMAL型の?パラメタに対してsetXXXメソッドで値を指定する場合に,けたあふれが発生したときの動作を次に示します。

  • 指定値の整数部のけた数が?パラメタの整数部のけた数よりも大きい場合:

    SQLExceptionを投入します。

  • 指定値の小数点以下のけた数が?パラメタの小数点以下のけた数よりも大きい場合:

    ?パラメタの小数点以下のけた数で切り捨てます。

(例)

?パラメタの型:DECIMAL(10,5)

指定値が123456.1234の場合,SQLExceptionを投入します。

指定値が1234.123456の場合,指定値を1234.12345として処理します。

注※4

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

[図データ]

注※5

JDBC SQLタイプがDATE型の場合,setDateメソッドにjava.util.Calendarオブジェクトを指定して実行すると,指定したjava.util.Calendarオブジェクトを使用してデータを変換し,時刻データを切り捨てて日付データだけをデータベースに格納します。このとき,時刻データを切り捨てるため,getDateメソッドにjava.util.Calendarオブジェクトを指定して,setDateメソッドで格納したデータを取得しても,setDateメソッドに指定した日付と異なる日付を取得する場合があります。

(例)

日本標準時をデフォルトのタイムゾーンとするUAPで,setDateメソッド,及びgetDateメソッドに世界標準時のタイムゾーンを持つjava.util.Calendarオブジェクトを指定した場合の例を次に示します。

setDateメソッドに「2005-10-03」を表すjava.sql.Dateオブジェクトを指定して実行した場合,JDBCドライバは時刻部分に「00:00:00」を補完した後,タイムゾーンの違いによって9時間遅らせて「2005-10-02 15:00:00」とし,日付部分「2005-10-02」をデータベースに格納します。このデータをgetDateメソッドで取得した場合,データベースから日付部分「2005-10-02」を取得し,時刻部分に「00:00:00」を補完した後,タイムゾーンの違いによって9時間進めて「2005-10-02 09:00:00」とします。これによって,getDateメソッドの戻り値のjava.sql.Dateオブジェクトには,「2005-10-02」が設定されるため,setDateメソッドに指定した「2005-10-03」とは異なります。

注※6

?パラメタにNULL述語を指定したSQL(? IS 〔NOT〕NULL)での,パラメタのデータ型としてだけ使用されます。