Java 插入负数-ORA-01722

Java 插入负数-ORA-01722,java,string,oracle-sqldeveloper,jdbctemplate,Java,String,Oracle Sqldeveloper,Jdbctemplate,我正在使用jdbcTemplate向Oracle数据库中插入一些数据。不幸的是,我遇到了以下错误: java.sql.SQLSyntaxErrorException: ORA-01722: invalid Number 首先,我将字符串转换为double: Number number = nmFormat.parse(record[8]); double doubleVLBalance = number.doubleValue(); 及之后: String sqlSettlementBal

我正在使用jdbcTemplate向Oracle数据库中插入一些数据。不幸的是,我遇到了以下错误:

java.sql.SQLSyntaxErrorException: ORA-01722: invalid Number
首先,我将字符串转换为double:

Number number = nmFormat.parse(record[8]);
double doubleVLBalance = number.doubleValue();
及之后:

 String sqlSettlementBalance = "INSERT INTO STARR4.TBSETR_SETTLEMENT_BALANCE"+
                "(DT_MOVEMENT,NU_CUSTOMER_REF, NU_MOD_CUSTOMER_REF,"+
                "NU_HIERARCHICAL_NODE, CD_ACQUIRER, CD_PRODUCT,"+
                "CD_BALANCE_TYPE, NU_CUSTOMER, VL_BALANCE, NU_CONTROL)"+
                "VALUES ('" ...,'"+doubleVLBalance+"','"+sb.getNuControl()+"')";

jdbcTemplate.update(sqlSettlementBalance);

字符串记录[8]的值为“-0.34”。有没有解决这个问题的建议?

如果用引号括起一个数字,它就会变成一个字符串。删除引号

 String sqlSettlementBalance = "INSERT INTO STARR4.TBSETR_SETTLEMENT_BALANCE"+
            "(DT_MOVEMENT,NU_CUSTOMER_REF, NU_MOD_CUSTOMER_REF,"+
            "NU_HIERARCHICAL_NODE, CD_ACQUIRER, CD_PRODUCT,"+
            "CD_BALANCE_TYPE, NU_CUSTOMER, VL_BALANCE, NU_CONTROL)"+
            "VALUES ('" ...,"+doubleVLBalance+",'"+sb.getNuControl()+"')";

如前所述,您应该删除引号,但我建议您

jdbcTemplate.update(sqlSettlementBalance);
使用

jdbcTemplate.update(sqlSettlementBalance, Object... args);
例如,类似这样的事情:

 String sqlSettlementBalance = "INSERT INTO STARR4.TBSETR_SETTLEMENT_BALANCE"+
            "(DT_MOVEMENT,NU_CUSTOMER_REF, NU_MOD_CUSTOMER_REF,"+
            "NU_HIERARCHICAL_NODE, CD_ACQUIRER, CD_PRODUCT,"+
            "CD_BALANCE_TYPE, NU_CUSTOMER, VL_BALANCE, NU_CONTROL)"+
            "VALUES ('"...,?,'"+sb.getNuControl()+"')";

jdbcTemplate.update(sqlSettlementBalance, doubleVLBalance);
PreparedStatement的用法见示例