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
相关产品推荐
相关产品推荐

