本地运行Java1.7+Ant项目时存储过程参数数量异常求助
问题排查方案
1. 核对数据库存储过程定义
登录数据库执行 sp_helptext 'dbo.SaveTest',查看存储过程的实际参数配置:
- 如果存储过程定义为无参数,报错原因就是你错误传递了参数,需修改SQL调用语句去掉占位符,或调整存储过程添加对应参数。
- 如果存储过程确实包含5个输入参数,继续排查以下点。
2. 检查代码参数与SQL占位符的数量匹配
你的代码中:
BigDecimal result = run.query("{call dbo.SaveTest(?,?,?,?,?)}", new ScalarHandler<BigDecimal>(), mapping2, mapping3, mapping4, mapping5);
SQL语句里有5个?占位符,但实际只传入了4个参数(mapping2到mapping5),参数数量缺失,这会直接导致参数不匹配问题,需补充缺失的那个参数(比如mapping1)。
3. 修正SQL Server存储过程的调用语法
如果存储过程需要返回值(你用ScalarHandler接收BigDecimal),SQL Server的正确调用语法应该包含返回值占位符:
{? = call dbo.SaveTest(?,?,?,?,?)}
修改后的代码示例:
BigDecimal result = run.query("{? = call dbo.SaveTest(?,?,?,?,?)}", new ScalarHandler<BigDecimal>(), mapping1, mapping2, mapping3, mapping4, mapping5);
4. 确认QueryRunner方法的合理性
SaveTest名称指向的是保存类操作,若无需查询返回结果,应使用update()方法而非query(),错误的方法调用也可能引发参数解析异常:
int affectedRows = run.update("{call dbo.SaveTest(?,?,?,?,?)}", mapping1, mapping2, mapping3, mapping4, mapping5);
内容的提问来源于stack exchange,提问作者RV_Mule
相关产品推荐
相关产品推荐

