您的位置:首页 > 其它

SimpleJdbcCall调用存储过程传递参数报错情况说明

2010-10-18 12:42 337 查看
一、报错信息

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"的形式进行传递。

由此可以引申出像浮点数、日期类型等类型的数据也是如此~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: