Oracle数据同步接口中,对于NUMBER、DATE类型数据,从resultSet中直接获取造成精度丢失的解决方案

23 篇文章 1 订阅

通过JDBC获取ORACLE数据库数据时,返回值统一都是ResultSet对象,就像存储过程中的游标,一行一行的读取数据。对于NUMBER和DATE类型的数据,如果java代码中直接用resultSet.getInt()、resultSet.getDate()等,往往会存在一些精度上的丢失。

  • NUMBER类型

NUMBER数据类型既可以标识整数,也可以表示小数,所以大部分情况下表中的数字类型字段都直接用NUMBER表示,在java中通过JDBC获取时,通过resultSet.getBigDecimal()来接收对应字段的数据,可以有效防止数据精度丢失。

BigDecimal bigDecimal = resultSet.getBigDecimal(s.trim());
  • DATE类型
    ORACLE数据库中的DATE类型数据,可以只表示年月日,也可以加上时分秒,相对而言非常灵活。如果通过resultSet.getDate()获取数据,返回值为java.sql.Date,该类型对象只能表示年月日,精度丢失可能会非常严重。java中还有一个java.util.Date类型,该类型对象却可以表示年月日+时分秒。所以在java中通过JDBC获取时,先将字段按照TimeStampe对象处理,再转换成java.util.Date对象。
					Timestamp timestamp1 = resultSet.getTimestamp(s.trim());
					//加上空判断,防止空指针异常
					if(timestamp1!=null){
						long time = timestamp1.getTime();
						//DateFormateUtil.formatDate方法在本地工具包中,将日期转换成对应字符串
						filedData = DateFormateUtil.formatDate(new Date(time));
					}
	public static String formatDate(Date date) throws ParseException {
	//SimpleDateFormat 不能保证线程安全,所以不要声明为静态成员变量
	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	    return sdf.format(date);
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穿条秋裤到处跑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值