mysql jdbc的ResultSet結果集,數字型別的null取出後為0
阿新 • • 發佈:2018-12-07
工作上用ResultSet時碰到的,
資料庫裡面的int,decimal等型別的欄位值為null, 通過jdbc的ResultSet的getInt("x")或者getDouble("x")取出來之後是null嗎,並不是,之前並沒有太在意,一直以為取出來應該是null,後來偶然發現居然不是null,是0。。 然後就好奇,查了下為什麼會是0。
先翻了下api,看了下ResultSet介面的getInt("x")返回值,一下就明白了,是int 而不是Integer,
Java程式碼
- public abstract int getInt(String paramString)
介面定義的時候就已經決定了它的返回值,
那麼我們可以獲取null的值嗎,用於區分null和0?答案是可以的!
方法一:
public abstract Object getObject(String paramString)
通過這個介面,我們可以獲取,如果欄位為null,會返回null值,這樣我們就可以來區分到底是0還是null了,就像這樣
Java程式碼
- Object object = rs.getObject("xx");
- if (object == null) {
- o.setXx(null);
- }else{
- ……
- }
方法二:Java程式碼
- o.setA(rs.getInt("xx"));
- if (rs.wasNull()) {
- o.setA(null);
- }
wasNull()方法可以判斷最後一次get到的資料是否是null的,但是一定要緊跟在需要判斷的那個列的get後面!!
不過話說ResultSet介面為什麼定義為只返回基本資料型別呢,或許是因為資料庫裡面的null難優化,提醒我們資料庫的欄位最好不要為null把