You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jdbcTemplate调用MySQL存储过程参数被识别为double报错原因

问题解答

根因说明

你遇到的报错本质不是int类型参数被识别为double,是参数传递逻辑错误触发了MySQL的隐式类型转换逻辑,具体原因如下:

  • 存储过程要求3个入参,参数顺序为(varchar类型的forma, int类型的ryear, int类型的rperiod),你调用时的SQL写为call send_mail.NotReporting(forma,?,?),第一个参数位直接写了forma且没有加单引号,会被MySQL识别为字段/标识符而不是字符串常量,后续你只传了2个int参数对应后面的2个占位符,整体参数匹配完全错位。
  • 当MySQL解析语法错位的SQL时,会尝试把不匹配的内容做隐式类型转换,错位后的参数位置刚好对应需要数值类型的ryear、rperiod字段,MySQL做数值转换时默认优先用DOUBLE类型做判断,解析到错误的字符串内容(比如报错里的,ryear,)转换失败就会抛出「不正确的DOUBLE值」的截断错误,和你传入的int参数本身无关。

修复方案

根据你的业务场景二选一即可:

  • 如果forma参数需要动态传入:把第一个参数位也改为占位符,传参时按顺序传入3个参数
    示例代码:
    public List notReporting(String forma, int ryear, int rperiod) {
        jdbcTemplate.update("call send_mail.NotReporting(?,?,?)", forma, ryear, rperiod);
        // 其余业务逻辑
    }
    
  • 如果forma参数是固定常量:给SQL里的forma值加上单引号包裹,避免被MySQL识别为标识符
    示例代码:
    public List notReporting(int ryear, int rperiod) {
        // 把'你的固定forma值'替换为实际的常量值即可
        jdbcTemplate.update("call send_mail.NotReporting('你的固定forma值',?,?)", ryear, rperiod);
        // 其余业务逻辑
    }
    

内容的提问来源于stack exchange,提问作者Leyla Aliyeva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:06:04