Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド |
目次 索引 |
第3部 EJB編 | > 第13章 Entity Beanの実装 | > 13.11 CMPで定義するJavaのデータ型とDBMSのSQLデータ型との対応 |
以下に、使用できる標準データ型を示します。
コンテナが、対応するJavaのプリミティブデータ型に変換してからデータベースに設定します。
以下に、nullが使用できるデータ型を示します。
以下に、Javaのデータ型とDBMSのSQLデータ型の組合せ(推奨パターン)を示します。
Javaのデータ型を、以下の表に示す以外のDBMSのSQLデータ型と組み合わせたい場合は、JDBCドライバの変換規則にしたがってください。
ただし、“使用できる標準データ型”で、(注)となっているデータ型については、コンテナが変換した後のJavaのプリミティブデータ型でJDBCの変換規則にしたがってください。
なお、Interstage EJBではJDBC1.0の範囲でサポートしています。
DBMSのSQLデータ型でCHAR型のような固定長文字列型を使用した場合、JDBCドライバの仕様により、返却される文字列データ値について後方空白削除、または空白パディングを行うためデータ値の不整合が起こる場合があります。
特にプライマリキーフィールドにCHAR型のカラムをマッピングする場合に注意してください。
このような場合、CHAR型のような固定長文字列型ではなく、VARCHAR型やVARCHAR2型といった可変長文字列型を使用することでこの問題は解決されます。
DBMSのSQLデータ型 |
||||
Symfoware |
Oracle |
SQL Server |
|
|
boolean/java.lang.Boolean |
− |
NUMBER |
BIT |
BOOLEAN |
byte/java.lang.Byte |
− |
NUMBER |
− (注9) |
SMALLINT |
char/java.lang.Character |
− |
− |
− |
− |
double/java.lang.Double |
FLOAT |
NUMBER |
FLOAT |
DOUBLE PRECISION (注7) |
float/java.lang.Float |
REAL |
NUMBER |
REAL |
REAL (注7) |
int/java.lang.Integer |
INT |
NUMBER |
INT |
INTEGER |
long/java.lang.Long |
− |
NUMBER |
BIGINT |
BIGINT |
short/java.lang.Short |
SMALLINT |
NUMBER |
SMALLINT |
SMALLINT |
java.lang.String |
CHAR |
CHAR (注2) |
CHAR |
CHARACTER |
java.math.BigDecimal |
NUMERIC |
NUMBER |
DECIMAL |
NUMERIC |
byte[] |
BLOB (注1) |
RAW |
BINARY |
BYTEA |
java.sql.Date |
DATE |
DATE |
− |
DATE |
java.sql.Time |
TIME |
DATE |
− |
TIME |
java.sql.Timestamp |
TIMESTAMP |
DATE |
DATETIME (注5)(注6) |
TIMESTAMP |
− : 推奨するデータ型は特にありません。
(注1)
以下の場合、32KB以上のBLOB型の列に対して取り出し/設定はできません。
オプション「CMPデータのstream転送」に“する”を設定している場合は、本注意事項は該当しません。
オプションの設定は、Interstage管理コンソールの[システム] > [ワークユニット] > “ワークユニット名” > “モジュール” > “EJBアプリケーション名” > [アプリケーション環境定義]のCMFマッピング定義で行います。
(注2)
Oracleを利用する場合、以下のデータ型については、取り扱い可能なデータ長に制限がある場合があります。
詳細は、OracleのJDBCのマニュアルで、setBytesメソッドとsetStringメソッドについて参照してください。
上記制限値より大きいデータ量を取り扱う場合は、BMPのEntity Beanを使用してください。
オプション「CMPデータのstream転送」に“する”を設定している場合は、本注意事項は該当しません。
オプションの設定は、Interstage管理コンソールの[システム] > [ワークユニット] > “IJServer名” > “EJBモジュール” > “EJBアプリケーション名” > [アプリケーション環境定義]のCMFマッピング定義で行います。
(注3)
OracleのLONG RAWデータ型を使用する場合、CMP1.1のEntity Beanのトランザクション属性にMandatoryを指定して動作させるとOracleのJDBCドライバより以下のメッセージが出力される場合があります。
「ORA-17027:ストリームはすでにクローズ済みです」
トランザクション属性にRequiredを指定することで上記問題は回避できますが、処理性能が劣化する場合があります。
(注4)
Oracle10gよりサポートされたデータ型です。
(注5)
datetime型とsmalldatetime型のデータを更新する場合は、以下の形式でデータを指定してください。
YYYY-MM-DD hh:mm:ss |
YYYY:年、MM:月、DD:日、hh:時、mm:分、ss:秒
(ミリ秒は未サポートです。)
2001-09-22 14:23:40
(注6)
datetime型に対して、以下のAPIを使用する場合、smalldatetime型の範囲内の値だけ有効となります。
(注7)
PostgreSQLのREALデータ型とDOUBLE PRECISIONデータ型は不正確な精度が変動する数値データ型です。したがって、正確な値ではなく、正確な値に近い値として保存されることがあるため、保存しようとする値と保存された値に多少の誤差がある可能性があります。
なお、ゼロに限りなく近い値で、ゼロとは区別されていない数値は、アンダーフローエラーを引き起こします。正確な記録や計算が必要な場合は、NUMERICデータ型を使用してください。
(注8)
OracleのBLOB/CLOBデータ型を利用する場合は、以下の条件を満たしてください。
(注9)
TINYINTは、SQL Server 2005ではshortが推奨型、SQL Server 2000ではbyteが推奨型です。
目次 索引 |