[Seasar-user:20256] Re: [DBFlute]OracleでDATE型カラムのインデックスが利用されない

kubo [E-MAIL ADDRESS DELETED]
2010年 10月 21日 (木) 00:38:17 JST


久保(jflute)です。

しゃってんさん、dbflute-oracle-example にて、
JDBC直接利用で日付周りを検証するテスト書きました。

VendorPlainTest.java
test_PreparedStatement_bindDate_timeHandling_Tx()

※Oracle10g XE にて、ojdbc5.jar、ojdbc6.jarの両方でグリーン

OracleのDATE型に対して、JDBCにおいて java.sql.Date で
取り扱うと、検索条件も値取得も時分秒が切り捨てられて
しまうことが上記のテストでわかります。
なので、DATE型に対しては、java.sql.Timestamp で取り扱う
のが基本と考えられます。

ただ、しゃってんさんの環境での現象が、
「java.sql.Date で設定すると逆にインデックスが利用される」
ということになるのであれば、かなりややこしい問題となります。

状況確認の前に論理を整理してみましたが、
上記のようなややこしい問題なのか、それともまた別の要因があるのか、
確認するために以下のトライをお願いします。

DBFluteConfigの処理をやめるとインデックスが利用されるか?
ValueTypeは簡単に独自のものに差し替えられるので、
JDBC に setDate() するか、setTimestamp() するかで、
インデックスの利用有無の違いが発生しているのかどうかを
確認して頂けると幸いです。

※そもそも、Oracle11g だと上記のテスト結果が違うとか
 だとさらにややこしくなりますが...


Seasar-user メーリングリストの案内