使用できる標準データ型
以下に、使用できる標準データ型を示します。
boolean
java.lang.Boolean (注)
byte
java.lang.Byte (注)
byte[]
char
java.lang.Character (注)
double
java.lang.Double (注)
float
java.lang.Float (注)
int
java.lang.Integer (注)
long
java.lang.Long (注)
short
java.lang.Short (注)
java.lang.String
java.math.BigDecimal
java.sql.Date
java.sql.Time
java.sql.Timestamp
注) コンテナが、対応するJavaのプリミティブデータ型に変換してからデータベースに設定します。
nullが使用可能なCMFのデータ型
以下に、nullが使用できるデータ型を示します。
java.lang.Boolean
java.lang.Byte
byte[]
java.lang.Character
java.lang.Double
java.lang.Float
java.lang.Integer
java.lang.Long
java.lang.Short
java.lang.String
java.math.BigDecimal
java.sql.Date
java.sql.Time
java.sql.Timestamp
推奨パターン
以下に、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 |
| |
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 |
- : 推奨するデータ型は特にありません。
以下の場合、32KB以上のBLOB型の列に対して取り出し/設定はできません。
バージョンレベルがV5.0L10より前のSymfowareを使用する場合
バージョンレベルがV5.0L10以降のSymfowareでRDA-SV連携を使用する場合
オプション「CMPデータのstream転送」に“する”を設定している場合は、本注意事項は該当しません。
オプションの設定は、Interstage管理コンソールの[システム] > [ワークユニット] > “ワークユニット名” > “モジュール” > “EJBアプリケーション名” > [アプリケーション環境定義]のCMFマッピング定義で行います。
Oracleを利用する場合、以下のデータ型については、取り扱い可能なデータ長に制限がある場合があります。
LONG RAW
LONG
詳細は、OracleのJDBCのマニュアルで、setBytesメソッドとsetStringメソッドについて参照してください。
上記制限値より大きいデータ量を取り扱う場合は、BMPのEntity Beanを使用してください。
オプション「CMPデータのstream転送」に“する”を設定している場合は、本注意事項は該当しません。
オプションの設定は、Interstage管理コンソールの[システム] > [ワークユニット] > “IJServer名” > “EJBモジュール” > “EJBアプリケーション名” > [アプリケーション環境定義]のCMFマッピング定義で行います。
OracleのLONG RAWデータ型を使用する場合、CMP1.1のEntity Beanのトランザクション属性にMandatoryを指定して動作させるとOracleのJDBCドライバより以下のメッセージが出力される場合があります。
「ORA-17027:ストリームはすでにクローズ済みです」
トランザクション属性にRequiredを指定することで上記問題は回避できますが、処理性能が劣化する場合があります。
Oracle10gよりサポートされたデータ型です。
datetime型とsmalldatetime型のデータを更新する場合は、以下の形式でデータを指定してください。
記述形式:
YYYY-MM-DD hh:mm:ss
YYYY:年、MM:月、DD:日、hh:時、mm:分、ss:秒 (ミリ秒は未サポートです。)
例:
2001-09-22 14:23:40
datetime型に対して、以下のAPIを使用する場合、smalldatetime型の範囲内の値だけ有効となります。
PreparedStatement.setTimestamp(int parameterIndex, Timestamp x)
PostgreSQLのREALデータ型とDOUBLE PRECISIONデータ型は不正確な精度が変動する数値データ型です。したがって、正確な値ではなく、正確な値に近い値として保存されることがあるため、保存しようとする値と保存された値に多少の誤差がある可能性があります。
なお、ゼロに限りなく近い値で、ゼロとは区別されていない数値は、アンダーフローエラーを引き起こします。正確な記録や計算が必要な場合は、NUMERICデータ型を使用してください。
OracleのBLOB/CLOBデータ型を利用する場合は、以下の条件を満たしてください。
Oracle10g R2以降のデータベースサーバを使用する
Oracle10g R2以降のThinドライバ、またはociドライバを使用する。
なお、本製品のJ2EE機能がサポートしているJavaのバージョンをサポートしているJDBCドライバを使用してください。
TINYINTは、SQL Serverではshortが推奨型です。