2012-11-01 41 views
-1

我正在使用準備好的語句批量插入記錄。 Iam迭代一個包含值和它們的數據類型不同的列表。其中一種數據類型是BigDecimal,當我嘗試設置調用準備語句時,它引發空指針異常。如何將列表對象轉換爲預編譯語句中的bigdecimal?

我的代碼

   int count = 1; 
       for (int j = 0; j < list.size(); j++) {      
        if(list.get(j) instanceof Timestamp) { 
         ps.setTimestamp(count, (Timestamp) list.get(j));  
        } else if(list.get(j) instanceof java.lang.Character) { 
         ps.setString(count, String.valueOf(list.get(j))); 
        } 
        else if(list.get(j) instanceof java.math.BigDecimal) { 
         ps.setBigDecimal(count, (java.math.BigDecimal)list.get(j)); 
        } else { 
         ps.setObject(count, list.get(j)); 
        }       
        count++; 
       } 

我嘗試2種方式轉換,鑄造對象,並試圖創建類型的新對象的BigDecimal

ps.setBigDecimal(count, new BigDecimal(list.get(j).toString)); 

兩個DONOT解決我的問題。它拋出空指針異常。

幫助表示讚賞。

感謝

+0

我們可以看到您的堆棧跟蹤而這潑灑在精確的線? –

+1

爲什麼你需要「instanceof java.math.BigDecimal」分支?如果列表中已經有BigDecimal,爲什麼不使用ps.setObject(count,list.get(j))? –

+0

感謝您的回覆,問題是我正在關閉我的preparedstatement並將prepare語句設置爲null,在try循環內的try catch塊內部。問題已解決。感謝Brian和Dan寶貴的時間。 –

回答

0

這裏是一個解決方案,我發現,這似乎是對所有類型的對象以原始類型非常有用。

public static BigDecimal getBigDecimal(Object value) { 
    BigDecimal ret = null; 
    if(value != null) { 
     if(value instanceof BigDecimal) { 
      ret = (BigDecimal) value; 
     } else if(value instanceof String) { 
      ret = new BigDecimal((String) value); 
     } else if(value instanceof BigInteger) { 
      ret = new BigDecimal((BigInteger) value); 
     } else if(value instanceof Number) { 
      ret = new BigDecimal(((Number)value).doubleValue()); 
     } else { 
      throw new ClassCastException("Not possible to coerce ["+value+"] from class "+value.getClass()+" into a BigDecimal."); 
     } 
    } 
    return ret; 
} 

這裏是鏈接: http://www.java2s.com/Code/Java/Data-Type/ConvertObjecttoBigDecimal.htm

相關問題