【问题标题】:JDBC Dates Deprecated in Java (java.sql package)Java 中不推荐使用的 JDBC 日期(java.sql 包)
【发布时间】:2009-05-20 12:34:44
【问题描述】:

我正在使用 JDBC 和 MySQL。我有一个需要包含在结果集中的日期列。不幸的是,我在 Java 中找不到一个类来检索日期。 SQL Date 类已弃用。如何从结果集中获取 Date 对象?

【问题讨论】:

    标签: java jdbc


    【解决方案1】:

    您使用java.sql.Date。不推荐使用构造函数和一些方法。班级不是。对此感到困惑,比如java.util.Datejava.util.Calendar?看Making Sense of Java's Dates

    共有三种 JDBC 日期/时间类型:

    混淆可能是由于 java.sql.Date 扩展了 java.util.Date 并因此继承了其已弃用的方法。

    只需为列的类型使用正确的类型即可。

    【讨论】:

    • 问题是唯一剩下的构造函数是创建一个以毫秒为单位的日期传递的构造函数。此外,它的所有不使用毫秒的 set 和 get 方法都已弃用。除非 SQL 以毫秒为单位返回日期,否则这似乎有点愚蠢。
    • 仔细阅读javadoc,java.sql.Date符合DATE JDBC类型,小于day的字段设置为零。当您有一个仅是日/月/年而不是 TIMESTAMP 或 TIME 的字段时,可以使用该类型。你到底想做什么?
    • 别忘了 java.sql.Date 是 java.util.Date 的子类(更多方法)
    【解决方案2】:

    我不认为 java.sql.Date 类本身它已弃用,只是它的构造函数之一。您应该可以安全地继续使用它。

    【讨论】:

      【解决方案3】:

      您可以安全地使用 java.sql.Date 类来映射您的 MySQL DATE 类型。 java.sql.Date 类扩展了 java.util.Date 类,因此您可以使用该对象进行所有类型的日期计算。

      【讨论】:

        【解决方案4】:

        旧帖,但无论如何:

        我对 java.util.Date 的粒度有问题并切换到 java.util.Timestamp。 我还遇到了时间戳类型的有限粒度(最多几秒)。

        数据库中的列被声明为日期,为了获得额外的时间部分,我将其检索为时间戳。问题是它会将值截断为秒。

        我研究了允许 6 个小数位的时间戳的 Oracle 默认定义。

        我猜是 oracle 定义中的 Date 部分限制了 Java 中的时间戳部分...

        干杯, 格拉齐纳

        【讨论】:

        • 这完全符合 JDBC 合同。如果要存储日期(日、月、年),请使用 java.sql.Date。如果要存储时间(小时、分钟、秒),请使用java.sql.Time。如果要存储时间戳(日、月、年、时、分、秒,也称为日期时间),请使用java.sql.Timestamp。根据使用的 DB 和 JDBC 驱动程序,Timestamp 中还有毫秒数。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-08
        • 2014-05-10
        • 2011-04-03
        相关资源
        最近更新 更多