Oracle JDBC Driver 10g の罠

8i→9i→10gとJDBCドライバを使ってきてましたが、今回の問題もほどよくキツイ。<問題>
DATE型カラムをPreparedStatementで検索した結果、9iではjava.sql.Timestampで取れていたのに、10gではjava.sql.Dateで返却されるため、時分秒が欠落してしまう。
ここでもう一つ問題があるのが、スクローラブルなPreparedStatementの場合は、今まで通りjava.sql.Timestampで返却されるのです。下記にまとめます。
PreparedStatementを2種類の方法で作成

  1. connection.prepareStatement(SQL);
  2. connection..prepareStatement(SQL, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

9i + 1:java.sql.Timestamp
9i + 2:java.sql.Timestamp
10g + 1:java.sql.Date
10g + 2:java.sql.Timestamp
10gドライバの10.1.0.2と10.1.0.4の2種類で試してみましたが結果は同じでした。色々解析した結果…<解決方法>
"-Doracle.jdbc.V8Compatible=true"を起動VMに渡すか、Connection生成時のjava.util.Propertiesにこの設定を行うことで、java.sql.Timestampが取得できるようになりました。これが本来の解決法だとは思わないのですが、Oracle JDBC ドライバのバグですか?