JDBC中利用反射封装结果集数据为对象操作,在转换Oracle 的int类型时候 出现 非法参数异常
java.lang.IllegalArgumentException
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)

排查问题发现通过ResltSet 获取字段的列类型为 java.math.BigDecimal类型
刚好和Oracle中number类型对应的数据类型一致
Oracle的界面PLSQL中可以显示类型 发现 列类型 int 换成 number(22)

oracle本来就没有int类型,为了与别的数据库兼容,新增了int类型作为number类型的子集。
int类型只能存储整数;
number可以存储浮点数,也可以存储整数;
number(8,1)存储小数位为1位,总长度为8的浮点数,如果小数位数不足,则用0补全;
number(8)存储总长度为8的整数;
int相当于number(22),存储总长度为22的整数。

有时候Mysql的int字段,会正确映射到Java的Integer类型,有时候又会映射到Java的Long类型上,最后终于找到原因。
原来是Mysql的int字段,勾选了unsigned无符号选项,这样就导致int类型,变成了long类型。
同理,MySQL的bigint类型,本来应该映射到Java的Long类型。但是如果勾选了unsigned无符号,则也会映射为BigInteger类型
