スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド

[目次][索引][前へ][次へ]

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

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

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

表18-68 setXXXメソッドと,マッピングされるJDBC SQLタイプ

PreparedStatementクラスのsetXXXメソッド マッピングされるJDBC SQLタイプ
setCharacterStream CHAR,VARCHAR
setRef※ REF
setBlob LONGVARBINARY
setClob※ CLOB
setArray ARRAY

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

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

表18-69 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 × × × × × ×

表18-70 setXXXメソッドとJDBCのSQLデータ型とのマッピング(2/2)

setXXXメソッド JDBCのSQLデータ型
VARCHAR DATE TIME TIMESTAMP LONGVARBINARY ARRAY
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を投入します。
  • ?パラメタの精度よりも小さい場合:拡張します。
  • ?パラメタの位取りよりも大きい場合:実際の位取りで切り捨てます。
  • ?パラメタの位取りよりも小さい場合:0で補完して,拡張します。

注※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」とは異なります。