4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OracleのDATE型項目にJDBC経由でjava.sql.Timeのインスタンスを登録したときの動きがドライバのバージョンで違う

Posted at

自分が遭遇したのは、 11.1.0.7.011.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 を使うなよという話だけど、そういう実装に遭遇してしまったのだから仕方ない。

参考

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?