Oracle JDBC Driver 10g の罠(追記+)

さらに正式回答頂きました。バグとして報告されているが、これが仕様だそうだ!つまり、Oracle JDBC Driver 9.0.1以前までは、DATE型をjava.sql.Timestampで返していたが、それ以降のバージョンはjava.sql.Dateで返す仕様に勝手(?)に変更したということである。JDBCドライバのJarをダウンロードできるがリリースノートってどこにあるんだろうか!?ojdbc14.jarファイル内にも無いですし、、、
もし今まで通りjava.sql.Timestampで値が欲しいなら

  1. 表をDATE型ではなくTIMESTAMP型にしなさい
  2. V8Compatibleオプションを使いなさい
  3. ResultSet#getTimestampで明示的に取りなさい

とのこと
やっぱり「最新版リリースされてるよ!」「じゃ、導入しよう!」とか、JDBCのバージョンを知らずに昔取ってきたのあるから使おうとか、絶対ダメです!
Oracle10gのJDBCドライバはなぜこのような仕様にしたのかすごく聞きたいですがきっと聞いても無駄でしょうね。OracleのDATE型は、年月日時分秒まで保持しているのにその値をJDBC経由ではjava.sql.Dateで返し時分秒を切り捨ててしまうということです。今後はDATE型ではなくTIMESTAMP型でテーブルを作る、これっておかしいと思いますがね。
今後、旧バージョンからOracle10gにする時に、既存のJavaアプリは要注意ですよ。