Hitachi

Hitachi Advanced Database AP開発ガイド


7.6.1 データ型のマッピング

ここでは,HADBのデータ型とJDBCのSQLデータ型のマッピングについて説明します。

〈この項の構成〉

(1) HADBのデータ型とJDBCのSQLデータ型の対応

HADBのデータ型とJDBCのSQLデータ型は,完全には一致していません。そのため,JDBCドライバが,HADBのデータ型とJDBCのSQLデータ型をマッピング(変換)します。マッピングできないデータ型を使用してアクセスしようとすると,SQLExceptionが投入されます。

データ型のマッピングは,ResultSetまたはPreparedStatementクラスのgetXXXメソッドおよびsetXXXメソッドで実行します。getXXXメソッドおよびsetXXXメソッドのマッピング規則については,JDBC1.0規格またはJDBC 2.0基本規格のドキュメントを参照してください。

HADBのデータ型とJDBCのSQLデータ型の対応を次の表に示します。

表7‒6 HADBのデータ型とJDBCのSQLデータ型の対応

HADBのデータ型

JDBCのSQLデータ型

BIGINT

BIGINT

INTEGER

INTEGER※2

SMALLINT

SMALLINT※3

DECIMALNUMERIC

DECIMAL(,NUMERIC※1

DOUBLE PRECISIONFLOAT

DOUBLE(,FLOAT※1

REAL

REAL

CHAR

CHAR

VARCHAR

VARCHAR(,LONGVARCHAR※1

STRING

LONGVARCHAR(,VARCHAR※1

DATE

DATE

TIME

TIME

TIMESTAMP WITHOUT TIME ZONE

TIMESTAMP

TIMESTAMP WITH TIME ZONE

TIMESTAMP WITH TIME ZONE

BINARY

BINARY(,VARBINARYLONGVARBINARY※1

VARBINARY

VARBINARY(,BINARYLONGVARBINARY※1

ROW

BINARY(,VARBINARYLONGVARBINARY※1

BOOLEAN

BOOLEAN

ARRAY

ARRAY

UUID

BINARY(,VARBINARYLONGVARBINARY※1

注※1

( )内のデータ型は,setNullメソッドまたはsetObjectメソッドの引数にJDBCのSQLデータ型を指定する場合にだけ対応します。HADBのデータ型からJDBCのSQLデータ型へマッピングする際には対応しません。

注※2

整数データ型のデータ形式がレガシー形式の場合は,対応するJDBCのSQLデータ型はBIGINT型になります。

注※3

整数データ型のデータ形式がレガシー形式の場合は,対応するJDBCのSQLデータ型はINTEGER型になります。

(2) 検索データ取得時のマッピング

ResultSetクラスのgetXXXメソッドと,JDBCのSQLデータ型とのマッピングを次の表に示します。マッピングできないJDBCのSQLデータ型に対してgetXXXメソッドが呼び出された場合は,SQLExceptionが投入されます。

表7‒7 getXXXメソッドとJDBCのSQLデータ型とのマッピング

メソッド名

JDBCのSQLデータ型

BIGINT

INTEGER

SMALLINT

DECIMAL

DOUBLE

REAL

CHAR

VCHAR

DATE

TIME

TIMESTAMP※2

BIN

ARRAY

BOOLEAN

getByte

※1

×

×

×

×

×

getShort

※1

×

×

×

×

×

getInt

※1

×

×

×

×

×

getLong

※1

×

×

×

×

×

getFloat

※1

×

×

×

×

×

getDouble

※1

×

×

×

×

×

getBigDecimal

※1

×

×

×

×

×

getBoolean

×

×

×

×

×

getString

×

getBytes

×

×

×

×

×

×

×

×

×

×

×

×

getDate

×

×

×

×

×

×

※1

×

×

×

getTime

×

×

×

×

×

×

※1

×

×

×

×

getTimestamp

×

×

×

×

×

×

※1

×

×

×

getAsciiStream

×

×

×

×

×

×

×

×

×

×

×

getObject

getCharacterStream

×

×

×

×

×

×

×

×

×

×

×

getBinaryStream

×

×

×

×

×

×

×

×

×

×

×

×

getArray

×

×

×

×

×

×

×

×

×

×

×

×

(凡例)

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

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

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

VCHARVARCHARLONGVARCHAR

BINBINARYVARBINARY

注※1

このメソッドでの変換の際に,データベースから取得した文字列データの前後に半角空白がある場合は,半角空白を取り除きます。また,半角空白を取り除いたあと,getXXXメソッドが返却するJavaのデータ型に変換します。

Javaのデータ型に変換する場合の注意事項を次に示します。

  • 文字列データに小数点以下の表現がある場合,getByteメソッド,getIntメソッド,getShortメソッド,またはgetLongメソッドを実行すると,小数点以下を切り捨てて整数だけを変換し,返却します。

  • 文字列データに全角文字が含まれている場合,変換はしないでSQLExceptionが投入されます。

  • 文字列データをJavaのデータ型に変換した結果,オーバフローが発生した場合,SQLExceptionが投入されます。

注※2

上記の表のTIMESTAMP型は,TIMESTAMP WITHOUT TIME ZONE型の場合です。

TIMESTAMP WITH TIME ZONE型の場合は,次のようになります。

  • getStringメソッド:○

  • getTimestampメソッド:○

  • getObjectメソッド:

  • そのほかのメソッド:×

(3) ?パラメタ設定時のマッピング

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

PreparedStatementクラスのsetXXXメソッドと各JDBCのSQLデータ型とのマッピングを次の表に示します。

表7‒8 setXXXメソッドとJDBCのSQLデータ型とのマッピング

メソッド名

JDBCのSQLデータ型

BIGINT

INTEGER

SMALLINT

DECIMAL※1

DOUBLE

REAL

CHAR

VCHAR

DATE

TIME

TIMESTAMP※5

BIN

ARRAY

BOOLEAN

setByte

×

×

×

×

×

setShort

×

×

×

×

×

setInt

×

×

×

×

×

setLong

×

×

×

×

×

setFloat

×

×

×

×

×

setDouble

×

×

×

×

×

setBigDecimal

×

×

×

×

×

setBoolean

×

×

×

×

×

setString

×

setBytes

×

×

×

×

×

×

×

×

×

×

×

×

setDate

×

×

×

×

×

×

×

×

×

setTime

×

×

×

×

×

×

×

×

×

×

setTimestamp※2

×

×

×

×

×

×

×

×

×

setAsciiStream

×

×

×

×

×

×

×

×

×

×

×

setObject※3

×

setCharacterStream

×

×

×

×

×

×

※4

×

×

×

×

×

setBinaryStream

×

×

×

×

×

×

×

×

×

×

×

×

(凡例)

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

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

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

VCHARVARCHARLONGVARCHAR

BINBINARYVARBINARY

注※1

HADBのデータ型であるDECIMAL型またはNUMERIC型の?パラメタに対してsetXXXメソッドで値を指定する場合に,?パラメタの精度および位取りと,値の精度および位取りが一致していないときの動作を次に示します。

  • ?パラメタの精度よりも大きいとき:SQLExceptionが投入されます。

  • ?パラメタの精度よりも小さいとき:拡張します。

  • ?パラメタの位取りよりも大きいとき:実際の位取りで切り捨てます。

  • ?パラメタの位取りよりも小さいとき:0で補完して,拡張します。

注※2

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

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

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

注※3

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

注※4

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

[図データ]

注※5

上記の表のTIMESTAMP型は,TIMESTAMP WITHOUT TIME ZONE型の場合です。

TIMESTAMP WITH TIME ZONE型の場合は,次のようになります。

  • setObjectメソッド:

  • そのほかのメソッド:×