mysql jdbc的ResultSet结果集,数字类型的null取出后为0

工作上用ResultSet时碰到的,

数据库里面的int,decimal等类型的字段值为null, 通过jdbc的ResultSet的getInt("x")或者getDouble("x")取出来之后是null吗,并不是,之前并没有太在意,一直以为取出来应该是null,后来偶然发现居然不是null,是0。。 然后就好奇,查了下为什么会是0。

先翻了下api,看了下ResultSet接口的getInt("x")返回值,一下就明白了,是int 而不是Integer,

Java代码

  1. public abstract int getInt(String paramString)  

 接口定义的时候就已经决定了它的返回值,

那么我们可以获取null的值吗,用于区分null和0?答案是可以的!

方法一:

public abstract Object getObject(String paramString)

通过这个接口,我们可以获取,如果字段为null,会返回null值,这样我们就可以来区分到底是0还是null了,就像这样

Java代码

  1. Object object = rs.getObject("xx");  
  2. if (object == null) {  
  3.     o.setXx(null);  
  4. }else{  
  5.     ……  
  6. }  

 方法二:Java代码

  1. o.setA(rs.getInt("xx"));  
  2. if (rs.wasNull()) {  
  3.      o.setA(null);  
  4. }  

 wasNull()方法可以判断最后一次get到的数据是否是null的,但是一定要紧跟在需要判断的那个列的get后面!!

不过话说ResultSet接口为什么定义为只返回基本数据类型呢,或许是因为数据库里面的null难优化,提醒我们数据库的字段最好不要为null把

转载于:https://men4661273.iteye.com/blog/2360579

猜你喜欢

转载自blog.csdn.net/hq091117/article/details/84873148