2016-10-19 2 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를 구문 분석 (문자열 STR) { 문자열을 정규화 = ""; if (str == null) { normalized = "0"; } else { 정규화 된 str.replaceAll ("\\ s", "") .replace (',', '.'); } return 새 BigDecimal (정규화); – Squero27

+0

댓글을 사용하지 마세요. ** 수정 ** 질문. 전체 예외 메시지와 함께 스택 추적을 게시하십시오. –

답변

1

parsing 메서드는 str이 빈 문자열 ("")이거나 공백 (" ")이면 예외를 throw합니다. 당신은

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

대답으로 코드를 편집 한 후 완벽하게 작동하지만 데이터베이스에 데이터를 삽입 할 때 다음 메시지가 표시됩니다. 스레드 스레드 예외 - 0 java.lang.arrayindexoutofboundsexception : 10 – Squero27

+0

마지막으로 잘 작동합니다. 쿼리에서 열 이름을 잊어 버렸습니다. @Gord Thompson에게 도움을 주셔서 감사합니다. – Squero27