OracleとJ2SE5で致命的なバグ - minghaiの日記

Java5のBigDecimalの仕様変更には,ちょいとした恨みがあるんだけど,よもやOracleにも影響があったとは.
つーか,PreparedStatement#setBigDecimal()BigDecimalを使う以上,他のJDBCドライバも怪しむ必要があるかもダ.


(追記)会社のOracle10gで試してみたけど,ちゃんと再現したよ(ドライバは10.1.0.2だったかな?).
さらに言えば,PreparedStatement#setBigDecimal()が悪いんじゃなくて,BigDecimalが悪い.つまり,同現象はPreparedStatement#setObject()でも起こるのだ.


ちなみに,すべてのBigDecimalがダメなワケじゃなくて,元ネタが指数付きだとヤバイようだ.
なんで,

new BigDecimal("12500000");

なんてのは平気だ.
不味いのはJavalobbyに投稿してあったようなパターンで,

new BigDecimal(new Double(12500000).toString());
new BigDecimal("1.25E+7");

みたいのはダメ.


と考えると,doubleやfloatをBigDecimalの元ネタにしてなければ,案外平気なのかも知れない.
#ん?BigDecimalで乗除算したのも不味いか.