#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 за вашу помощь