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"的形式进行传递。
由此可以引申出像浮点数、日期类型等类型的数据也是如此~~~
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"的形式进行传递。
由此可以引申出像浮点数、日期类型等类型的数据也是如此~~~
相关文章推荐
- c#调用存储过程时 SqlParameter 中传递参数时ref参数的设置方法
- hibernate里使用jdbc方式调用oracle带游标返回参数的简单分页存储过程
- JAVA JDBC 调用存储过程 传参数
- 调用对方WSDL中方法,使用CALL方式传递字符串参数
- VB.net数据库编程(06):调用存储过程(带参和不参数情况)
- JDBC调用存储过程输出游标参数的存储过程
- JS 调用存储过程传递参数
- 用JDBC给存储过程传递数组类型的参数
- jdbc如何传递java collection参数到procedure存储过程方法参数(db colleciton)
- python 函数参数的传递(参数带星号的说明)及调用
- java中调用存储过程并传递list集合参数的方法
- MVC4 引用DLL 成功越狱实体模型 自由调用存储过程 自由传递参数
- JDBC创建并调用存储过程
- mybatis 调用mysql存储过程 带输出输入参数
- java Http中put请求传递参数调用接口
- 终于解决了--调用存储过程提示传递参数多的问题!
- asp.net调用exe并传递参数然后关闭exe
- Oracle 使用OUT参数创建/调用存储过程
- 使用<a>标签调用struts2的action、传递动态参数、以及参数中出现加号等特殊字符的处理方法
- java中jdbc调用存储过程