昨天自己开发了一个bug ~~~~~~~ 记录一下长点记性
oracle数据库定义了一个字段数据类型为:number(15,2)
一看想着反正是数字类型的,就用Double接收吧,
Double d =(Double) rs.getObject("XXX")
结果就报错了:BigDecimal不能强制转换成Double
修改代码很容易 BigDecimal bgd = (BigDecimal)rs.getObject("XXX");
Double d = bgd.doubleValue();
但是要搞清楚BigDecimal和Double的区别
写了一段代码测试了一下
很奇怪!!!
再修改一下:
又不奇怪了,查询其他同学的说法,BigDecimal与Double的主要区别在精度和四舍五入上,还有同学说Java中的简单浮点数类型float和double不能够进行运算,看上述结果,double数据类型的四则运算确实是有问题的,同学们以后在处理需要进行运算的数据时还是使用BigDecimal和BigInteger数据类型要安全一些。
还有还有,若Dao层方法返回一个整型数据,返回值类型一定要写Integer,而不是int。因为如果数据库查询结果为null,null在转换为int时就会出错,而这个错误我们不好捕获,所以用Integer数据类型接收就会比较安全,接收后在service层再进行非空判断,就很好控制了。