Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド
目次 索引 前ページ次ページ

第3部 EJB編> 第13章 Entity Beanの実装> 13.11 CMPで定義するJavaのデータ型とDBMSのSQLデータ型との対応

13.11.1 標準データ型

■ 使用できる標準データ型

 以下に、使用できる標準データ型を示します。


 コンテナが、対応するJavaのプリミティブデータ型に変換してからデータベースに設定します。

■ nullが使用可能なCMFのデータ型

 以下に、nullが使用できるデータ型を示します。

■ 推奨パターン

 以下に、Javaのデータ型とDBMSのSQLデータ型の組合せ(推奨パターン)を示します。

 Javaのデータ型を、以下の表に示す以外のDBMSのSQLデータ型と組み合わせたい場合は、JDBCドライバの変換規則にしたがってください。
 ただし、“使用できる標準データ型”で、(注)となっているデータ型については、コンテナが変換した後のJavaのプリミティブデータ型でJDBCの変換規則にしたがってください。

 なお、Interstage EJBではJDBC1.0の範囲でサポートしています。


 DBMSのSQLデータ型でCHAR型のような固定長文字列型を使用した場合、JDBCドライバの仕様により、返却される文字列データ値について後方空白削除、または空白パディングを行うためデータ値の不整合が起こる場合があります。
 特にプライマリキーフィールドにCHAR型のカラムをマッピングする場合に注意してください。

 このような場合、CHAR型のような固定長文字列型ではなく、VARCHAR型やVARCHAR2型といった可変長文字列型を使用することでこの問題は解決されます。

Javaのデータ型

DBMSのSQLデータ型

Symfoware

Oracle

SQL Server


PostgreSQL

boolean/java.lang.Boolean

NUMBER

BIT

BOOLEAN

byte/java.lang.Byte

NUMBER

(注9)

SMALLINT

char/java.lang.Character

double/java.lang.Double

FLOAT
DOUBLE

NUMBER

FLOAT

DOUBLE PRECISION (注7)

float/java.lang.Float

REAL

NUMBER

REAL

REAL (注7)

int/java.lang.Integer

INT

NUMBER

INT

INTEGER
SERIAL

long/java.lang.Long

NUMBER

BIGINT

BIGINT
BIGSERIAL

short/java.lang.Short

SMALLINT

NUMBER

SMALLINT
TINYINT (注9)

SMALLINT

java.lang.String

CHAR
NCHAR
VARCHAR
NVARCHAR

CHAR (注2)
VARCHAR2 (注2)
LONG (注2)
CLOB (注8)

CHAR
VARCHAR
TEXT
NCHAR
NVARCHAR
NTEXT

CHARACTER
CHARACTER VARYING
TEXT

java.math.BigDecimal

NUMERIC
DECIMAL

NUMBER

DECIMAL
NUMERIC
MONEY
SMALLMONEY

NUMERIC
DECIMAL

byte[]

BLOB (注1)

RAW
LONG RAW (注2)(注3)
BLOB (注8)

BINARY
VARBINARY
IMAGE

BYTEA

java.sql.Date

DATE

DATE

DATE

java.sql.Time

TIME

DATE

TIME

java.sql.Timestamp

TIMESTAMP

DATE
TIMESTAMP(注4)

DATETIME (注5)(注6)
SMALLDATETIME (注5)

TIMESTAMP
TIMESTAMP WITH TIMEZONE

− : 推奨するデータ型は特にありません。

(注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:秒
(ミリ秒は未サポートです。)
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が推奨型です。


目次 索引 前ページ次ページ

Copyright 2008 FUJITSU LIMITED