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

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

12.11.1 標準データ型

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

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

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

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

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

■ 推奨パターン

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

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

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

image
 DBMSがOracleで、CHAR型のカラムを使用すると、OracleのJDBCドライバによって、返却される文字列の後ろに続く空白(スペース)を削除する、または文字列長さを合わせるパディングを行うため、データの不整合が起こる可能性があります。
 特にプライマリキーフィールドにCHAR型のカラムをマッピングする場合に注意が必要です。
 CHAR型を使用する代わりにVARCHAR2型を使用することで、この問題は解決されます。

image

Javaのデータ型

DBMSのSQLデータ型

Symfoware

Oracle

SQL Server

boolean/java.lang.Boolean

NUMBER

byte/java.lang.Byte (注1)

NUMBER

char/java.lang.Character

double/java.lang.Double

FLOAT
DOUBLE

NUMBER

float

float/java.lang.Float

REAL

NUMBER

real

int/java.lang.Integer

INT

NUMBER

int

long/java.lang.Long

NUMBER

short/java.lang.Short (注1)

SMALLINT

NUMBER

smallint

java.lang.String

CHAR
NCHAR
VARCHAR
NVARCHAR

CHAR (注3)
VARCHAR2 (注3)
LONG (注3)

char
varchar
text

java.math.BigDecimal

NUMERIC
DECIMAL

NUMBER

decimal
numeric
money
smallmoney

byte[]

BLOB (注2)

RAW
LONGRAW (注3)(注4)

binary
varbinary
image
timestamp

java.sql.Date

DATE

DATE

java.sql.Time

TIME

DATE

java.sql.Timestamp

TIMESTAMP

DATE

datetime (注5)(注6)
smalldatetime (注5)

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

(注1)
 CMFのJavaのデータ型が“byte/java.lang.Byte”または“short/java.lang.Short”の場合で、Oracle8iのJDBCドライバを使用してCMP2.0のメソッドを実行すると、“列の型が無効です。”というエラーが発生する場合があります
 この場合、CMFのJavaのデータ型を“int/java.lang.Integer”または“long/java.lang.Long”に変更してください。

(注2)
 以下の場合、32KB以上のBLOB型の列に対して取出し/設定はできません。

(注3)
 Oracleの以下のデータ型は取り扱い可能なデータ量に制限があります。

 上記制限値より大きいデータ量を取り扱う場合はBMPのEntity Beanを使用してください

(注4)
 OracleのLONGRAWデータ型を使用する場合、CMPのEntity Beanのトランザクション属性にMandatoryを指定して動作させるとOracleのJDBCドライバより以下のメッセージが出力される場合があります。
 「ORA-17027:ストリームはすでにクローズ済みです」
 トランザクション属性にRequiredを指定することで上記問題は回避できますが、処理性能が劣化する場合があります。

(注5)
 datetime型とsmalldatetime型のデータを更新する場合は、以下の形式でデータを指定してください。

(注6)
 datetime型に対して、以下のAPIを使用する場合、smalldatetime型の範囲内の値だけ有効となります。

image

Javaのデータ型

DBMSのSQLデータ型

Symfoware

Oracle

boolean/java.lang.Boolean

NUMBER

byte/java.lang.Byte (注1)

NUMBER

char/java.lang.Character

double/java.lang.Double

FLOAT
DOUBLE

NUMBER

float/java.lang.Float

REAL

NUMBER

int/java.lang.Integer

INT

NUMBER

long/java.lang.Long

NUMBER

short/java.lang.Short (注1)

SMALLINT

NUMBER

java.lang.String

CHAR
NCHAR
VARCHAR
NVARCHAR

CHAR (注3)
VARCHAR2 (注3)
LONG (注3)

java.math.BigDecimal

NUMERIC
DECIMAL

NUMBER

byte[]

BLOB (注2)

RAW
LONGRAW (注3)(注4)

java.sql.Date

DATE

DATE

java.sql.Time

TIME

DATE

java.sql.Timestamp

TIMESTAMP

DATE

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

(注1)
 CMFのJavaのデータ型が“byte/java.lang.Byte”または“short/java.lang.Short”の場合で、Oracle8iのJDBCドライバを使用してCMP2.0のメソッドを実行すると、“列の型が無効です。”というエラーが発生する場合があります
 この場合、CMFのJavaのデータ型を“int/java.lang.Integer”または“long/java.lang.Long”に変更してください。

(注2)
 以下の場合、32KB以上のBLOB型の列に対して取出し/設定はできません。

(注3)
 Oracleの以下のデータ型は取り扱い可能なデータ量に制限があります。

 上記制限値より大きいデータ量を取り扱う場合はBMPのEntity Beanを使用してください

(注4)
 OracleのLONGRAWデータ型を使用する場合、CMPのEntity Beanのトランザクション属性にMandatoryを指定して動作させるとOracleのJDBCドライバより以下のメッセージが出力される場合があります。
 「ORA-17027:ストリームはすでにクローズ済みです」
 トランザクション属性にRequiredを指定することで上記問題は回避できますが、処理性能が劣化する場合があります。

image

Javaのデータ型

DBMSのSQLデータ型

Symfoware

Oracle

PostgreSQL

boolean/java.lang.Boolean

NUMBER

BOOLEAN

byte/java.lang.Byte

NUMBER

SMALLINT

char/java.lang.Character

double/java.lang.Double

FLOAT
DOUBLE

NUMBER

DOUBLE PRECISION (注4)

float/java.lang.Float

REAL

NUMBER

REAL (注4)

int

INT

NUMBER

INTEGER
SERIAL

java.lang.Integer

INT

NUMBER

INTEGER

long

NUMBER

BIGINT
BIGSERIAL

java.lang.Long

NUMBER

BIGINT

short/java.lang.Short

SMALLINT

NUMBER

SMALLINT

java.lang.String

CHAR
NCHAR
VARCHAR
NVARCHAR

CHAR (注2)
VARCHAR2 (注2)
LONG (注2)

CHARACTER
CHARACTER VARYING
TEXT

java.math.BigDecimal

NUMERIC
DECIMAL

NUMBER

NUMERIC
DECIMAL

byte[]

BLOB (注1)

RAW
LONGRAW (注2)(注3)

BYTEA

java.sql.Date

DATE

DATE

DATE

java.sql.Time

TIME

DATE

TIME

java.sql.Timestamp

TIMESTAMP

DATE

TIMESTAMP
TIMESTAMP WITH TIMEZONE

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

(注1)
 以下の場合、32KB以上のBLOB型の列に対して取出し/設定はできません。

(注2)
 Oracleの以下のデータ型は取り扱い可能なデータ量に制限があります。

 上記制限値より大きいデータ量を取り扱う場合はBMPのEntity Beanを使用してください

(注3)
 OracleのLONGRAWデータ型を使用する場合、CMPのEntity Beanのトランザクション属性にMandatoryを指定して動作させるとOracleのJDBCドライバより以下のメッセージが出力される場合があります。
 「ORA-17027:ストリームはすでにクローズ済みです」
 トランザクション属性にRequiredを指定することで上記問題は回避できますが、処理性能が劣化する場合があります。

(注4)
 PostgreSQLのREALデータ型とDOUBLE PRECISIONデータ型は不正確な精度が変動する数値データ型です。したがって、正確な値ではなく、正確な値に近い値として保存されることがあるため、保存しようとする値と保存された値に多少の誤差がある可能性があります。
 なお、ゼロに限りなく近い値で、ゼロとは区別されていない数値は、アンダーフローエラーを引き起こします。正確な記録や計算が必要な場合は、NUMERICデータ型を使用してください。


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

All Rights Reserved, Copyright(C) 富士通株式会社 2006