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

Java JDBC传入枚举参数报Incorrect integer value错误如何解决?

问题根因
  • 直接调用setObject()传入枚举对象时,JDBC默认会执行Java序列化逻辑,插入到数据库的是序列化后的二进制值,与表中CATEGORY_ID字段的整数类型不匹配,所以会抛出类型错误
  • 你定义的Category枚举本身存在构造方法赋值错误,参数i没有正确赋值给成员变量id,即使后续调用getId()也会拿到错误值
修复方案

1. 修复Category枚举的构造方法

public enum Category {
    Food(1), Electricity(2), Restaurant(3),Vacation(4);

    private int id;
    // 原代码错误:将未初始化的id赋值给自身,参数i未被使用,修改为将i赋值给成员变量id
    private Category(int i) {
        this.id = i;
    }
    public int getId() {
         return id;
    }
}

2. 修改JDBC参数设置逻辑

不要直接传入枚举对象,而是调用枚举的getId()方法获取对应的整数值,用setInt()方法设置参数即可:

// 原错误代码:statement.setObject(2, coupon.getCategory());
// 修改为:
statement.setInt(2, coupon.getCategory().getId());
扩展说明

如果你的数据库表中对应的字段是字符串类型,需要存储枚举的常量名(比如存"Electricity"而不是整数2),则可以调用枚举自带的name()方法获取枚举常量名,用setString()传参即可:

statement.setString(2, coupon.getCategory().name());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 10:12:04