java.math.BigInteger cannot be cast to java.lang.Long错误的正确解决方案

在通过反射给jdbc查询结果赋值的时候,报了这个错误。

setMethod.invoke(obj, ds.getObject(colName));

看到网上说的,通过把ds.getObject(colName)类型java.math.BigInteger,先转string再转为long,看似可以解决类型转换问题,其实是个大坑,想一想就觉得肯定应该是类型的取值范围不统一导致这个错误的。

查了下signed Bigint(20) 取值范围是-9223372036854775808~9223372036854775807,与 java.lang.Long的取值范围一致,而unsigned Bigint(20)(也是我设置的数据库存储类型),其取值范围是0 ~ 18446744073709551615,这已经超出了java.lang.Long的取值范围。

所以应该修改对应的实体类的数据存储类型,应采用java.math.BigInteger

为了避免新手中了网上方法的坑,特此记录一下,希望能帮到需要的人,网上东西千万别无脑信。

像这个问题,就是给你挖坑。。。。

你可能感兴趣的:(java,开发语言,后端,数据库开发)