自分が遭遇したのは、 11.1.0.7.0
と 11.2.0.3.0
での違い。
ドライバのバージョンが 11.1.0.7.0
の場合は、年月日を変更せずにそのままの値で DB に登録するが、 11.2.0.3.0
では年月日を 1970/01/01 に変換して登録するっぽい。
以下のテーブルを作って、それぞれ登録してみた。
確認用テーブル作成DDL
CREATE TABLE TEST (DATE_COLUMN DATE);
確認用Groovy実装
import groovy.sql.Sql
import java.sql.Time
def url = 'url'
def user = 'user'
def pass = 'pass'
def driver = 'oracle.jdbc.OracleDriver'
def sql = Sql.newInstance(url, user, pass, driver)
def now = new Date()
def time = new Time(now.getTime())
println "time = " + time.format('yyyy/MM/dd HH:mm:ss.SSS')
sql.execute "INSERT INTO TEST VALUES (${time})"
ドライバのバージョン | 標準出力 | DBに登録された値 |
---|---|---|
11.1.0.7.0 |
time = 2014/03/05 16:58:49.417 |
2014/03/05 16:58:49 |
11.2.0.3.0 |
time = 2014/03/05 17:01:07.405 |
1970/01/01 17:01:07 |
どちらも、 Time
型に変換した時点では年月日がそのままだけど、 DB に登録した時点で 11.2.0.3.0
の方は年月日が 1970/01/01 に変換されている。
そもそも年月日を気にする項目で java.sql.Time
を使うなよという話だけど、そういう実装に遭遇してしまったのだから仕方ない。