■質問日: |
2003/05/21 |
■最終更新日: |
2007/01/25 |
■質問内容: |
Oracle JDBC Driver 9.2.x/10.x を使用するときの注意点を教えてください。 |
■回答内容: |
DB上のDATE型のカラムに対して ResultSetMetaData.getColumnType() を使って取得できるカラムタイプの値が変更されています。 Oracle JDBC Driver 8.1.x: java.sql.Type.TIMESTAMP Oracle JDBC Driver 9.0.x: -100 Oracle JDBC Driver 9.2.x: java.sql.Type.DATE Oracle JDBC Driver 10.x : java.sql.Type.DATE 従って、Oracle JDBC Driver 9.2.x(または10.x)を使ってDATE型のカラムにアクセスすると ResultSet#getDate()メソッドでDATE型のデータを得ようとします。 しかし、Oracle JDBC DriverのResultSet#getDate()メソッドでは 時刻のデータが切り捨てられ日付のデータのみ取得されます。 時刻まで扱いたいのであれば、Oracle 9.2(または10g)のデータベース上のカラムの型をDATEではなく TIMESTAMPとして定義してください。(推奨) (この場合、Oracle JDBC Driver 8.1.x ではアクセスできなくなります。) もしくは、JVM起動時のパラメタに -Djp.co.tenartni.wwb.date_map_to_timestamp=true を指定してください。これによりDATE型のカラムを強制的にTIMESTAMP型にマッピング します。(ただし、この機能はWDC 1.30-009またはそれ以降のみ利用できます。) この場合、DATE型のカラムにはミリ秒部分を格納しないように注意してください。 ※2004.03.15追記 Oracle JDBC Driver 9.2.0.x Type 4を使用して、TIMESTAMP(0)型のデータを 取得しようとするとエラーになります。(おそらくOracle JDBC Driver Type4 の障害と思われます。) Oracle JDBC Driver Type 2 を使用するか、カラムの型をTIMESTAMP(3)などに 変更してください。 ※2007.01.25追記 WDC 1.30より前のバージョン(1.20-xxxなど)では、ナノ秒を含むタイムスタンプ値を 扱うことができません。 したがって、テーブルを作成する際のカラムの型は、TIMESTAMP(3)などにしてください。 TIMESTAMP(6)など、ナノ秒を含む場合、データの取得や更新ができない場合があります。 |
■添付資料: |
なし |