如果你目前正使用oracle作为数据库并且想要升级现有的java应用程序到java 5上去,请小心.
oracle jdbc驱动有一个bug,下面是示例:
首先,创建一个简单的表:
create table test_table(value number)
public static void main(string[] args) throws exception ...{ class.forname ("oracle.jdbc.oracledriver"); connection connection = null; try ...{ connection = (connection) drivermanager.getconnection ("some_oci_url",
"user", "****"); string query = "insert into test_table values (?)"; preparedstatement stmt = connection.preparestatement(query); bigdecimal bd = new bigdecimal(new double(12500000).tostring()); stmt.setbigdecimal(1, bd); stmt.execute(); } finally ...{ if(connection != null) connection.close(); }}
oracle 9.2,java 1.5,jdbc 驱动是从oracle官方网站上提供的ojdbc14.jar.
所有的都准备好以后,从test_table表中查询数据:
select * from test_tablevalue-----1250000
我们把这个bug报告给oracle技术支持,他们在oracle 10g上进行了测试,其结果更是糟糕,12500000变成了12,1250000是正确的,125000000变成了12.
oracle的建议是:
等待在11g的驱动中进行修复或者使用jdk1.4
许多人(一些orm框架)使用bigdecimal来处理double型数据,上面我使用的例子确实是用来处理double到数字类型转换的castor jdo方式.如果你最近升级你的jvm到java 5,就有可能存在这个严重的bug,不幸的是,oracle准备在11g中修复这个bug,看起来oracle将会在11g中支持jdk1.5.
很多公司对数据的升级是很慢的,我相信现在很多公司并没有使用10g.我猜测人们可能在2010年以后才可能是用11g,难道我们等到11g支持java5那个使用才使用java 5吗?
闽公网安备 35060202000074号