有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JAVAsql。Java 8和Java 6中的日期比较

我知道一个java。sql。日期将小时、分钟、秒和毫秒设置为零,以符合标准SQL日期的定义。这是有文档记录的here(在Java8中也是如此)

我还知道Oracle DATE type确实有这些年、月、日、小时、分钟和秒的时间域。但没有分数秒,也没有时区

我注意到Java 6和Java 8中的相同查询的行为不一样:

private static final String REQUETE_LISTE_CALENDRIER_DATE = 
    " SELECT ID_DATE, JOUR" +
    " FROM CALENDRIER " +
    " WHERE ID_DATE = ? ";

绑定到^{}a java。sql。日期“dateCourante”的定义如下(为这些时间字段设置值):

GregorianCalendar gregorianCalendar = new GregorianCalendar(); // "now"
java.sql.Date dateCourante = new java.sql.Date(gregorianCalendar.getTime().getTime()); // date AND time of "now"
  • 使用Java 6,我找到了一个值
  • 对于Java8,我没有

在我的数据库中,日期有小时、分、秒差零。我们可以通过以下查询进行检查:

select to_char(id_date, 'DD/MM/YYYY HH24:MI:SS')
from calendrier
where id_date = to_date('26/08/2016', 'DD/MM/YYYY');

这就产生了:

26/08/2016 00:00:00

我的理解是:

  • 在Java6中,在数据库上启动查询之前,^{}的时间字段被设置为零,而
  • 在Java8中,^{}的时间字段保留在查询中

我还没有找到关于这种行为的文件

有人能证实或解释吗

作为一种解决方法,我使用这个,如here所述: dDate=java。sql。日期valueOf(dDate.toLocalDate());//其中dDate是java。sql。日期


共 (1) 个答案

  1. # 1 楼答案

    JavaSE8还为其他一些常见用例提供了类

    YearMonth

    还有^{}类,它包含一个月和一天。用于表示生日

    MonthDay

    ^{}类涵盖信用卡开始日期和到期日期用例,以及人们没有指定日期的场景

    JDBC 4.2

    JavaSE8中的JDBC将支持这些新类型,但不会有公开的JDBCAPI更改。现有的通用setObject和getObject方法就足够了