GVKun编程网logo

java spring jdbc Oracle DATE 类型读取时没有时分秒问题及解决方案(oracle date对应java)

1

最近很多小伙伴都在问javaspringjdbcOracleDATE类型读取时没有时分秒问题及解决方案和oracledate对应java这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你

最近很多小伙伴都在问java spring jdbc Oracle DATE 类型读取时没有时分秒问题及解决方案oracle date对应java这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展AG 百家家乐网站登录网址《 787977.tv 飞机 @gb560 》java.util.Date 与 java.sql.Date、java Date、java.sql.Date、localTime、SimpleDateFormat 的格式及应用、java util.Date 和 sql.Date 转换 (时区转换)、java – Spring JDBC vs JDBC等相关知识,下面开始了哦!

本文目录一览:

java spring jdbc Oracle DATE 类型读取时没有时分秒问题及解决方案(oracle date对应java)

java spring jdbc Oracle DATE 类型读取时没有时分秒问题及解决方案(oracle date对应java)

问题出处,公司一个项目中使用动态sql方式查询Oracle数据库,在展示时Date类型字段只展示日期,无时分秒。

分析:

1、众所周知Oralce的日期类型有很多种,Date ,Timestamp等。其中Date类型对用的是java.sql.Date类型,Timestamp对用的是java.sql.Timestamp类型。这两个类型均继承自java.util.Date,其中java.sql.Date是没有时分秒的大家可以查看一下javaApi

2、ResultSet 的getObject(*)方法对用Date类型默认返回的是java.sql.Date

3、网上很多人提供的解决方案是将数据库Date类型改为Timestamp类型,显示当中数据库类型DBA是不会允许你改动的,且Oracle中对于时分秒要求不严格的地方DBA反而是建议用Date而不用Timestamp以节省资源

4、ibatis的ResultMap中对Date类型指定为Timestamp却能够正常显示

经过一番思考后发现对用Date类型的字段使用rs.getTimestamp(*)即可正常显示

在此记录一下,以后遇到此类问题避免说该数据库类型这种让人笑掉大牙的话

AG 百家家乐网站登录网址《 787977.tv 飞机 @gb560 》java.util.Date 与 java.sql.Date

AG 百家家乐网站登录网址《 787977.tv 飞机 @gb560 》java.util.Date 与 java.sql.Date

问:java.sql.Date 和 java.util.Date 有什么区别?

答:这两个类的区别是 java.sql.Date 是针对 SQL 语句使用的,它只包含日期而没有时间部分,一般在读写数据库时用。java.util.Date 是在除了 SQL 语句外的所有情况下使用的,一般是日常日期字段。java.util.Date 是 java.sql.Date 的父类。唯一的相同点就是都有 getTime 方法返回毫秒数。代码解释所示:

public class DateShow {
    public static void main(String[] args) {
        java.util.Date nowUtil = new java.util.Date();
        java.sql.Date nowSql = new java.sql.Date(System.currentTimeMillis());

        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(format.format(nowUtil));
        System.out.println(format.format(nowSql));
        System.out.println(nowUtil);
        System.out.println(nowSql);
    }
}
复制
 运行结果如下:
 2018-06-08 17:33:06
 2018-06-08 17:33:06
 Fri Jun 08 17:33:06 CST 2018
 2018-06-08
复制

之所以直接打印 Date 对象表现的值不一样就是上面解释的部分,是指是调用了各自 Date 的 toString () 方法,两个 Date 对象分别有自己的 toString () 重写实现,感兴趣的可以打开源码对比一下就明白了。

java Date、java.sql.Date、localTime、SimpleDateFormat 的格式及应用

java Date、java.sql.Date、localTime、SimpleDateFormat 的格式及应用

Date 各种格式应用如下:

public class DateTest {
public static void main(String[] args) {
// java sal date
Date utilDate = new java.util.Date();
Date sqDdate1 = new java.sql.Timestamp(System.currentTimeMillis());
Date sqDdate2 = new java.sql.Date(System.currentTimeMillis());
Date sqDdate3 = new java.sql.Time(System.currentTimeMillis());
// 时间戳
long timeStamp = System.currentTimeMillis();
Date date = new Date();
// date format
SimpleDateFormat sdf = new SimpleDateFormat ("yyyy 年 MM 月 dd 日 HH:mm:ss 第 ww 周 第 DDD 天");
String formatDate = sdf.format(date);
// 几个小时前时间
LocalTime minusHours = LocalTime.now().minusHours(5);
LocalTime now = LocalTime.now();
LocalDateTime now2 = LocalDateTime.now();
// 时间最大值
Date endTime = new Date(Long.MAX_VALUE);

System.out.println("utilDate:" + utilDate);
System.out.println("sqDdate1:" + sqDdate1);
System.out.println("sqDdate2:" + sqDdate2);
System.out.println("sqDdate3:" + sqDdate3);
System.out.println("timeStamp:" + timeStamp);
System.out.println("date:" + date);
System.out.println("formatDate:" + formatDate);
System.out.println("minusHours:" + minusHours);
System.out.println("endTime:" + endTime);
System.out.println("now:" + now);
System.out.println("now2:" + now2);
}

}

输出结果为:

utilDate:Mon Feb 18 21:52:15 CST 2019
sqDdate1:2019-02-18 21:52:15.784
sqDdate2:2019-02-18
sqDdate3:21:52:15
timeStamp:1550497935784
date:Mon Feb 18 21:52:15 CST 2019
formatDate:2019 年 02 月 18 日 21:52:15 第 08 周 第 049 天
minusHours:16:52:15.900
endTime:Sun Aug 17 15:12:55 CST 292278994
now:21:52:15.900
now2:2019-02-18T21:52:15.901

 

java util.Date 和 sql.Date 转换 (时区转换)

java util.Date 和 sql.Date 转换 (时区转换)

 

public static Timestamp zoneTtime(String time) throws Exception{

        time= "2018-08-01T10:01:21.905+0800";

        SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd''T''HH:mm:ss");
        SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        //字符串转换为util.Date,timestamp-->Wed Aug 01 10:01:21 CST 2018
        java.util.Date date = format1.parse(time);

        //timestamp-->2018-08-01 10:01:21
        String timestamp = format2.format(format1.parse(time));

        //sqlStamp-->2018-08-01 10:01:21.0(为什么会有毫秒?因为Timestamp就是精确到毫秒的)
        Timestamp sqlStamp = new Timestamp(format2.parse(timestamp).getTime());

        //util.Date转sql.Date-->2018-08-01
        java.sql.Date sqlDate=new java.sql.Date(date.getTime());

        System.out.println("sqlDate========================="+sqlDate);


        return sqlStamp;
    }

 

java – Spring JDBC vs JDBC

java – Spring JDBC vs JDBC

我一直在尝试使用spring 3.0 SimpleJdbcTemplate,它需要5分钟来插入1500条记录,而它需要几秒钟.使用直接JDBC插入.不确定我做错了什么.

最佳答案
如果您正在构建批处理,请考虑使用Spring批处理 – JdbcBatchItemWriter以及正确的块大小设置,这将在不到一秒的时间内加载这1500条记录.

今天关于java spring jdbc Oracle DATE 类型读取时没有时分秒问题及解决方案oracle date对应java的介绍到此结束,谢谢您的阅读,有关AG 百家家乐网站登录网址《 787977.tv 飞机 @gb560 》java.util.Date 与 java.sql.Date、java Date、java.sql.Date、localTime、SimpleDateFormat 的格式及应用、java util.Date 和 sql.Date 转换 (时区转换)、java – Spring JDBC vs JDBC等更多相关知识的信息可以在本站进行查询。

本文标签: