java 中ResultSet的getDouble方法
2019-05-09 本文已影响0人
LuChenghao
今天在写代码的时候,遇到一个问题。
业务很简单,就是select出来一些数据,然后java代码去拿这些数据。例如:
select column1, column2 from table;
然后拿到ResultSet集合,遍历这个集合。
然后我们的业务是要对取出来的数据为NULL的值,就是设置为NULL。然后代码是这么写的(其实是Copy的其他地方的代码),
Double value= resultSet.getDouble("column1");
原来以为这么写也是没有问题的,但是结果发现就是取不到NULL的情况,当值为NULL的时候,取出来的结果就是为0. 这个跟实际的case是不吻合的。后来用了getBigDecimal,就没有出现这个问题了。
通过Java 的Docs文档,我们可以发现有这么一句话:
Returns:
the column value; if the value is SQL NULL, the value returned is 0.
并且在java 编程语言中,getDouble方法的ResultSet object 是作为一个double的来看待的,double作为原始数据类型,是没有NULL的值的。所以NULL就被默认转换成了0. 而getBigDecimal方法是不会这样的,数据库里是啥,取出来的结果就是啥。并且会带有全部的精度。
---EOF---