1. 程式人生 > >mysql jdbc的ResultSet結果集,數字型別的null取出後為0

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