如何在准备好的语句中将列表对象转换为bigdecimal?

问题描述 投票:-1回答:1

我正在使用预准备语句批量插入记录。 Iam迭代包含值的列表,并且它们的dataTypes不同。其中一个数据类型是BigDecimal,当我尝试设置调用preparestatement时,它会抛出空指针异常。

我的代码

                int count = 1;
                for (int j = 0; j < list.size(); j++) {                     
                    if(list.get(j) instanceof Timestamp) {
                        ps.setTimestamp(count,  (Timestamp) list.get(j));       
                    } else if(list.get(j) instanceof java.lang.Character) {
                        ps.setString(count, String.valueOf(list.get(j)));
                    }
                    else if(list.get(j) instanceof java.math.BigDecimal) {
                        ps.setBigDecimal(count, (java.math.BigDecimal)list.get(j));
                    } else {
                        ps.setObject(count, list.get(j));   
                    }                           
                    count++;
                }

我尝试了两种转换方法,转换对象并尝试创建一个BigDecimal类型的新对象

ps.setBigDecimal(count, new BigDecimal(list.get(j).toString));

两个人都没有解决我的问题。它抛出空指针异常。

帮助表示赞赏。

谢谢

java mysql prepared-statement
1个回答
1
投票

这是我发现的一个解决方案,它似乎对所有类型的Object都是有用的。

public static BigDecimal getBigDecimal( Object value ) {
    BigDecimal ret = null;
    if( value != null ) {
        if( value instanceof BigDecimal ) {
            ret = (BigDecimal) value;
        } else if( value instanceof String ) {
            ret = new BigDecimal( (String) value );
        } else if( value instanceof BigInteger ) {
            ret = new BigDecimal( (BigInteger) value );
        } else if( value instanceof Number ) {
            ret = new BigDecimal( ((Number)value).doubleValue() );
        } else {
            throw new ClassCastException("Not possible to coerce ["+value+"] from class "+value.getClass()+" into a BigDecimal.");
        }
    }
    return ret;
}

这是链接:http://www.java2s.com/Code/Java/Data-Type/ConvertObjecttoBigDecimal.htm

© www.soinside.com 2019 - 2024. All rights reserved.