Исключение NumberFormatException при разборе строки в BigDecimal

#java #bigdecimal

#java #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. Пожалуйста, укажите полное исключение stacktrace

2. Я включил эту функцию в свой код: private static BigDecimal parse(String str) { String normalized=»»; if(str==null){normalized=»0″; }else{ normalized = str.replaceAll(«\ s», «»).replace(‘,’, ‘.’); } возвращает новую BigDecimal(нормализованную);

3. Не используйте комментарии, отредактируйте свой вопрос. И опубликуйте stacktrace с полным сообщением об исключении.

Ответ №1:

Ваш parsing метод выдаст это исключение, если str это пустая строка ( "" ) или пробел ( " " ). Возможно, вам потребуется выполнить дополнительную проверку, например,

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

Комментарии:

1. После редактирования кода с вашим ответом он работает отлично, но когда я хочу вставить данные в базу данных, я получаю это сообщение: Исключение в потоке thread-0 java.lang.arrayindexoutofboundsexception: 10

2. Наконец, это работает хорошо, я забыл имя столбца в запросе, спасибо @Gord Thompson за вашу помощь