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

在使用SimpleJdbcCall调用存储过程时遇到NumberFormatException。错误源于将数值型参数未初始化为数值类型,导致执行存储过程失败。解决办法是确保传递的参数类型与存储过程中的参数类型匹配,如数值型参数应以数值而非空字符串形式传递,同样适用于浮点数和日期类型等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、报错信息

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

    由此可以引申出像浮点数、日期类型等类型的数据也是如此~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值