2016-10-19 13 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) 

私は問題が同程度だと思いますパーサーがテキストや値を持たないセルを見つけたときに、メソッドを呼び出すことができます。

+1

私は私のコードにこの機能を含める必要があり、完全な例外スタックトレース –

+0

を含めてください、例えば、いくつかの余分なチェックを行う必要がある場合があります。 プライベート静的BigDecimalをパース(String str)文字{ 文字列を正規化=「」; if(str == null){ 正規化された= "0"; } else { 正規化= str.replaceAll( "\\ s"、 "").replace( '、'、 '。'); } return新しいBigDecimal(正規化された); – Squero27

+0

コメントは使用しないでください** **あなたの質問を編集してください。また、スタックトレースに完全な例外メッセージをポストします。 –

答えて

1

parsingメソッドは、strが空の文字列("")またはスペース(" ")の場合、その例外をスローします。あなたは

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

あなたの答えでコードを編集した後、それは完璧に動作しますが、データベースにデータを挿入したいときは、次のメッセージが表示されます。 スレッドスレッドの例外0例外java.lang.arrayindexoutofboundsexception:10 – Squero27

+0

最後に、クエリでカラム名を忘れました、あなたの助けに@Gord Thompsonありがとう – Squero27