我是靠谱客的博主 悲凉滑板,最近开发中收集的这篇文章主要介绍Oracle中i列定义int类型对应Java中java.math.BigDecimal类型,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题

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 和 integer 同义,y一般对应着java中的long类型。

有时候Mysql的int字段,会正确映射到Java的Integer类型,有时候又会映射到Java的Long类型上,最后终于找到原因。

原来是Mysql的int字段,勾选了unsigned无符号选项,这样就导致int类型,变成了long类型。

同理,MySQL的bigint类型,本来应该映射到Java的Long类型。但是如果勾选了unsigned无符号,则也会映射为BigInteger类型

在这里插入图片描述

  • Oracle 的 timestamp 对应 java oracle.sql.TIMESTAMP

参考

MySQL与Oracle的数据类型对照表

最后

以上就是悲凉滑板为你收集整理的Oracle中i列定义int类型对应Java中java.math.BigDecimal类型的全部内容,希望文章能够帮你解决Oracle中i列定义int类型对应Java中java.math.BigDecimal类型所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部