您的位置:首页 > 数据库 > Oracle

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

2019-07-24 17:00 1206 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_41885819/article/details/97137096

通过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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐