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で乗除算したのも不味いか.