OracleJDBCのgetObjectでDATE型をjava.sql.Timestampとして取得
OracleのDATE型は時刻情報を保持しますが、ResultSet.getObject()で取得すると、(たぶん9i,10gでは)java.sql.Dateにマッピングされ、時刻が切り捨てられてしまいます。ResultSet.getTimestamp()なら日時を取得できますので、これを使えるのであればあっさり解決です。しかし、この奇妙な動作のためにプログラムをいじりたくないので、頭を悩ませていました。
この問題を回避する情報がいくつか見つかったので、書いておきます。
V8Compatible
Oracle9iから、"V8Compatible"というプロパティが使えるようになりました。これを設定すれば、DATE型をjava.sql.Timestampとして取得することができます。
java -Doracle.jdbc.V8Compatible=true ...
ただし、これだとsetObjectは上手くいきません。他の部分も「Oracle8i互換」な箇所があるかもしれないので、多少の不安が残ります。
mapDateToTimestamp
Oracle11gからは、Oracle8iとの互換性をサポートをしなくなり、"V8Compatible"は廃止されました。
その代わり、"mapDateToTimestamp"(デフォルト=true)というシステムプロパティが導入され、OracleのDATE型がTimestampにマッピングされるようです。
残念ながら、こちらで試せる環境が無いので未確認ですが、サーバがOracle9,10でも使えるみたいです。おそらく、setObjectも上手くいくでしょう。