不会健身的程序员
不是好作家

达梦7数据库报java.math.BigDecimal cannot be cast to java.lang.Integer

背景

达梦数据库:7.1.4.6
数据库驱动版本:4.0.7.5.170(Dm7JdbcDriver15.jar)
数据库是用达梦自带的迁移工具迁移到达梦的

现象

后台经常性报错

java.math.BigDecimal cannot be cast to java.lang.Integer

排查

通过测试发现
假设有一个表

T {
a number(10,0)
}

下面4条

select a from T;
select max(a) as a from T;
select min(a) as a from T;
select count(a) as a from T;

在oracle下返回的数据类型是

java.lang.Integer
java.lang.Integer
java.lang.Integer
java.lang.Integer

在达梦数据库下返回的数据类型是

java.lang.Integer
java.math.BigDecimal
java.math.BigDecimal
java.lang.Long

数据库函数的返回值类型,都跟字段对应的类型不一样了

解决

联系达梦数据库工程师,提供的解决办法是,在jdbcurl中加入?compatibleMode=oracle

jdbc:dm//192.168.0.1:5236/linjunlong?compatibleMode=oracle

加了该参数之后,上述4条sql的返回值都是

java.lang.Integer
java.lang.Integer
java.lang.Integer
java.lang.Integer

加了之后数据库函数的返回值类型,都跟字段对应的类型一样了

最后

因为项目是oracle迁移的数据库,项目本身的代码都是在oracle数据库下编写的,在不想改动代码的情况下,通过该配置能解决问题当然是最好了,如果不想通过配置解决,那么可以通过修改代码,判断类型,进行转换。

20201010:亲测有效
赞(0)
转载请注明出处:林俊龙博客 » 达梦7数据库报java.math.BigDecimal cannot be cast to java.lang.Integer

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

年年岁岁花相识,岁岁年年人不同

给我留言网站地图

谢主隆恩

支付宝扫一扫打赏

微信扫一扫打赏