• Java程序处理不同数据库时间类型


     处理时间类型时,最大的问题就是带时区的时间类型

    例如Oracle的以下三个时间类型,是在Oracle的包下面的类型,其他数据库就不识别

    import oracle.sql.TIMESTAMP;

    import oracle.sql.TIMESTAMPLTZ;

    import oracle.sql.TIMESTAMPTZ;

     

     需要转化成java的带时区时间类型:

    java.time.OffsetDateTime;

    sqlservice的  DateTimeOffset  同理

    1. /**
    2. * 将sql返回集转为 List>,key:列名 Object:列值
    3. *
    4. * @param rs
    5. * @return
    6. */
    7. @Override
    8. public List> getRs(ResultSet rs) {
    9. // 得到列的个数
    10. List> datas = new ArrayList>();
    11. try {
    12. ResultSetMetaData rsmd = rs.getMetaData();
    13. int colCount = rsmd.getColumnCount();
    14. // 因为要存储列的名字,所以要与列的个数相同
    15. String[] colNames = new String[colCount];
    16. /* 装上列的名字
    17. * getColumnLabel 别名
    18. * getColumnLabel()方法的索引是从1开始的。给最苦 写成从0开始,就抛了异常。
    19. */
    20. for (int i = 1; i <= colCount; i++) {
    21. colNames[i - 1] = rsmd.getColumnLabel(i);
    22. }
    23. // 这里的泛型声明也是有技巧的。
    24. HashMap data = null;
    25. // 把查询到的结果装入datas中
    26. while (rs.next()) {
    27. data = new HashMap();
    28. for (int i = 0; i < colCount; i++) {
    29. //此种带时区的时间类型单独处理
    30. if (object instanceof TIMESTAMPLTZ || object instanceof TIMESTAMPTZ) {
    31. // key value
    32. OffsetDateTime offsetDateTime = rs.getObject(colNames[m], OffsetDateTime.class);
    33. data.put(colNames[m], offsetDateTime);
    34. } else if (object instanceof TIMESTAMP) {
    35. LocalDateTime localDateTime = rs.getObject(colNames[m], LocalDateTime.class);
    36. data.put(colNames[m], localDateTime);
    37. } else if (object instanceof DateTimeOffset) {
    38. OffsetDateTime offsetDateTime = ((DateTimeOffset) object).getOffsetDateTime();
    39. data.put(colNames[m], offsetDateTime);
    40. } else {
    41. // key value
    42. data.put(colNames[m], object);
    43. }
    44. }
    45. datas.add(data);
    46. }
    47. } catch (Exception e) {
    48. log.error(ExceptionUtil.getStackTrace(e));
    49. throw new DtsException(e.getMessage());
    50. }
    51. return datas;
    52. }

  • 相关阅读:
    LeetCode 每日一题——623. 在二叉树中增加一行
    解决TypeError: type complex doesn‘t define __round__ method
    【面试题】说说JS中的this指向问题
    node笔记_koa框架是什么?
    Kotlin 开发Android app(十):Android控件绑定ViewBinding
    状态迁移法你还不会?看看这篇文章
    3月黄油奶酪行业数据分析:安佳和妙可蓝多领军市场
    动态折线图,制作原来是这么简单
    MPLS LDP的原理与配置
    Redis的安装及启动
  • 原文地址:https://blog.csdn.net/tck001221/article/details/132715175