【问题标题】:How to check the date of the current day is equal to date that store in database?如何检查当天的日期是否等于存储在数据库中的日期?
【发布时间】:2022-01-21 13:44:39
【问题描述】:

我想知道我的应用程序中有多少新的每日订阅,但是当使用equalcompareTo 方法时,计数器将为零,但在我的数据中,有三个新的每日订阅。

String sql = "select paidDate from traineeJoinPayment; ";
ResultSet rs = statement.executeQuery(sql);
Date date1 = new Date();
java.sql.Date date2 = new java.sql.Date(date1.getTime());
int dayCount = 0;
while (rs.next()) {
    java.sql.Date date = java.sql.Date.valueOf(rs.getString(1));
    if ((date2.equals(date)))
        dayCount++;
}

另外,我正在尝试制作另一个单独的示例,但结果是一样的。

String rs = "2022-01-21";
java.sql.Date date = java.sql.Date.valueOf(rs);
Date date1 = new Date();
java.sql.Date date2 = new java.sql.Date(date1.getTime());
System.out.println(date.equals(date2));

这里也是输出false

注意:在 MySQL 中执行上述查询时的以下日期

2022-01-05
2022-01-02
2022-01-06
2022-01-08
2021-12-30
2022-01-01
2022-01-21

【问题讨论】:

  • 旁注:嗯,我不是一个 Java 人,所以我可能会错过一些东西,但看起来你获取整个表的列,然后应用过滤器并计算Java 中的匹配行。您是否意识到,您可以直接在数据库查询中执行此操作,这很可能便宜很多?
  • 试试select count(*) from traineeJoinPayment where paidDate >= ? and paidDate < ?
  • 这是一个普通的 sql 东西:select count(*) from traineeJoinPayment where paidDate = CURDATE()
  • 我怀疑java.util.Datejava.sql.Date 的超类)的时间部分正在干扰equals...
  • 坦克很多,我用Turo查询解决了这个问题,`

标签: java mysql sql jdbc


【解决方案1】:

避免使用旧的日期时间类

永远不要使用Date 类。这两个可怕的类在几年前被 JSR 310 中定义的现代 java.time 类所取代,并在 JDBC 4.2 及更高版本中得到支持。具体来说,java.sql.DateLocalDate 替换。

使用数据库,卢克

通常最好利用数据库进行尽可能多的工作。数据库引擎通常经过高度优化,最适合搜索和比较等任务。

因此,与其将一堆行交给 Java 进行过滤,不如让数据库进行查询。

? ?

确定当前日期需要时区。对于任何给定的时刻,日期在全球范围内都会因时区而异。

ZoneId z = ZoneId.of( "America/Edmonton" ) ;
LocalDate today = LocalDate.now( z ) ;

SQL

您的 SQL 查询将如下所示。

SELECT * FROM event_ WHERE date_ = ? ;

Java

在 Java 端,提供日期。

myPreparedStatement.setObject( … , today ) ;

检索。

LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2018-04-05
    • 2013-06-25
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多