【问题标题】:Select date query with time format is not working with JDBCTemplate and util.Date选择时间格式的日期查询不适用于 JDBCTemplate 和 util.Date
【发布时间】:2013-06-19 10:20:35
【问题描述】:

我正在使用 Spring JDBCTemplate 连接数据库。当我使用以下查询在数据库中选择日期时

select to_date(valid_to,'DD-MM-YYYY HH24:MI:SS') from composition

输出是,31-12-99 23:59:59。

但是,当我使用下面的 JDBCTemplate 时,

Date d = jdbcTemplate.queryForObject("select to_date(valid_to,'DD-MM-YY HH24:MI:SS') from composition",Date.class);

输出是 2099-12-31 00:00:00.0。

时间不正确。我在 Date 课上也需要相同的时间。如何得到它?

【问题讨论】:

    标签: java spring date jdbctemplate


    【解决方案1】:

    您必须导入java.sql.Date。请改用java.util.Datejava.util.Timestamp

    java.sql.Date 将截断时间。

    【讨论】:

    • 据我所知queryForObject 不适用于java.util.Date
    【解决方案2】:

    您需要使用java.sql.Timestampjava.sql.Date 没有时间分量,所以它的时间总是 00:00:00。

    【讨论】:

    • 假设是java.sql.Date 他们使用的不是java.util.Date
    【解决方案3】:

    感谢您的所有回复。我找到了一种消磨时间的方法。

    String dateString = jdbcTemplate.queryForObject("select to_char(valis_to, 'DD-MM-YYYY HH24:MI:SS') from composition",String.class);
    Date date = sdf.parse(dateString);
    

    【讨论】:

    • 这段代码很好,因为根据您原始猜测中 to_date 函数的使用,列 valid_to 表 index_composition 似乎不是日期。对于日期列,我真的会考虑使用类 java.sql.Timestamp
    • 使用 java.sql.Timestamp 比依赖特定 RDBMS 供应商实现的 to_char 转换要好得多。
    【解决方案4】:

    java.sql.Date 不保留小时、分钟、秒和毫秒,因为它反映了 SQL 中的日期类型。只需请求 java.sql.Timestamp 而不是 Date。由于 Timestamp 是 java.util.Date 的子类型,所以可以直接询问。

    import java.util.Date;
    import java.sql.Timestamp;
    
    [...]
    
    Date d = jdbcTemplate.queryForObject("select to_date(valid_to,'DD-MM-YY HH24:MI:SS') from index_composition", Timestamp.class);
    

    【讨论】:

    • 你能解释一下你的答案吗?
    【解决方案5】:

    Java 8 允许我们使用更适合的 Date 类(在 java.time.* 中)。 从 LocalDate (java) 到 sql 日期的转换由:java.sql.Date.valueOf(LocalDate.of(2012, Month.DECEMBER, 12))

    Oracle 建议使用 java 8 Dates 而不是最旧的版本:

    这些类有几个缺点,包括:

    The Calendar class was not type safe.
    Because the classes were mutable, they could not be used in multithreaded applications.
    Bugs in application code were common due to the unusual numbering of months and the lack of type safety.
    

    【讨论】:

      猜你喜欢
      • 2012-03-06
      • 1970-01-01
      • 2020-11-17
      • 2021-03-28
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多