一、报错信息
java.lang.NumberFormatException
at java.math.BigDecimal.<init>(Unknown Source)
at java.math.BigDecimal.<init>(Unknown Source)
at oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical(OraclePreparedStatement.java:9001)
at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:8843)
at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:9323)
at oracle.jdbc.driver.OracleCallableStatement.setObject(OracleCallableStatement.java:4905)
at org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:279)
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:217)
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:128)
at org.springframework.jdbc.core.CallableStatementCreatorFactory$CallableStatementCreatorImpl.createCallableStatement(CallableStatementCreatorFactory.java:213)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:930)
at org.springframework.jdbc.core.JdbcTemplate.call(JdbcTemplate.java:985)
at org.springframework.jdbc.core.simple.AbstractJdbcCall.executeCallInternal(AbstractJdbcCall.java:368)
at org.springframework.jdbc.core.simple.AbstractJdbcCall.doExecute(AbstractJdbcCall.java:342)
at org.springframework.jdbc.core.simple.SimpleJdbcCall.execute(SimpleJdbcCall.java:164)
二、原因
这个问题是由于存储过程输入参数中有个是数值型,在传递参数的时候没有初始化成数值型,在执行存储过程中导致报错。
三、解决方案
Spring框架会自动处理不同类型字段的注入工作,在传递这样的参数时,一定要符合存储过程参数类型数据再进行传递。
比如有个存储过程中有个参数在数据库表中是数值型,传递过程中以字符串""这样的形式是会报上面的那个错误,要以"0"的形式进行传递。
由此可以引申出像浮点数、日期类型等类型的数据也是如此~~~