2016-10-19 112 views
0

我的代碼是:NumberFormatException的解析字符串爲BigDecimal

String sql="insert into L_EC(AMOUNT)values(?)"; 

    pst=con.prepareStatement(sql); 


    for(int i=0;i<dtm.getRowCount();i++){ 
    BigDecimal nbr= parsing(dtm.getValueAt(i, 1).toString()); 
    prst.setBigDecimal(1, nbr); 
    prst.addBatch(); 
} 
prst.executeBatch(); 

信息: 列的類型的Currency

private static BigDecimal parsing(String str) { 
    String normalized=""; 
    if(str==null){ 
     normalized="0"; 
    }else{ 
    normalized = str.replaceAll("\\s", "").replace(',', '.'); 
    } 
    return new BigDecimal(normalized); 

問題是,當從表中的單元格包含NULL,我得到這個消息:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException 
    at java.math.BigDecimal.<init>(BigDecimal.java:545) 
    at java.math.BigDecimal.<init>(BigDecimal.java:739) 
    at Vista.TCRCG.parse(TCRCG.java:130) 

我認爲問題是在同等水平當解析器找到一個沒有任何文本或值的單元格時使用sing方法。

+1

請包括完整的異常堆棧跟蹤 –

+0

我有這個功能,我的代碼: 私有靜態BigDecimal的解析(字符串str){ 字符串標準化=「」; if(str == null){normalized =「0」; } else { normalized = str.replaceAll(「\\ s」,「」).replace(',','。'); } return new BigDecimal(normalized); – Squero27

+0

請勿使用評論,**編輯**您的問題。並用完整的異常消息發佈堆棧跟蹤。 –

回答

1

如果str是空字符串("")或空格(" "),則parsing方法將拋出該異常。你可能需要做一些額外的檢查,例如,

if (str == null || str.trim().length() == 0) { 
    normalized = "0"; 
+0

編輯代碼與您的答案後,它完美的工作,但是當我想要在數據庫中插入數據時,我得到此消息: 線程線程0異常java.lang.arrayindexoutofboundsexception:10 – Squero27

+0

最後,它運作良好,在查詢時忘記了一個專欄名稱,謝謝@Gord Thompson對你的幫助 – Squero27