【问题标题】:oracle db current_date returns java.sql.Timestamp, not java.sql.Dateoracle db current_date 返回 java.sql.Timestamp,而不是 java.sql.Date
【发布时间】:2018-05-14 19:14:12
【问题描述】:

oracle 数据库 JDBC:

select current_date from dual

它返回一个 java.sql.Timestamp,而不是 java.sql.Date 实例。

select current_timestamp from dule

它返回一个 oracle.sql.TIMESTAMPTZ,而不是 java.sql.Timestamp 实例。

如何让它们返回 JDBC java.sql.* 标准类型的值?

【问题讨论】:

    标签: oracle jdbc timestamp


    【解决方案1】:

    在 Oracle 中,DATE 数据类型具有年、月、日、小时、分钟和秒部分。

    在 Java 中:

    • java.sql.Date 类具有年、月和日组件。
    • java.sql.Timestamp 类具有年、月、日、小时、分钟和秒组件。

    Oracle DATE 的正确 Java 数据类型是 java.sql.Timestamp 而不是 java.sql.Date(您可以使用 java.sql.Date 作为存储过程等的返回值,但它会截断时间分量)。


    在 Oracle 中,CURRENT_TIMESTAMP 的数据类型为 TIMESTAMP WITH TIME ZONE。在 Java 中,这相当于 oracle.sql.TIMESTAMPTZ 类。

    【讨论】:

      【解决方案2】:

      Oracle SQL 返回 Oracle 数据类型。您可以使用 trunc(current_date) 摆脱时间部分(虽然它不会影响返回类型!)。但是,要使用 JDBC 获取正确的数据类型,只需使用 https://docs.oracle.com/javase/8/docs/api/java/sql/ResultSet.html 中的正确 get 方法即可。 getDate 方法返回一个java.sql.DategetTimestamp 方法返回一个java.sql.Timestamp

      【讨论】:

      • getXXX() 与 getObject():使用 getXXX(...) 方法时,如果 resultSet.getInt(index) 为 null,则会引发异常。空值如何处理?
      • 你需要检查结果集是否有数据。例如,while (resultSet.next()) { System.out.println(resultSet.getString(1) + " " + resultSet.getString(2)); }
      • 实际上 getInt 被记录为为空值返回 0。您可以使用 wasNull 检查它是否为空。如果 getInt 出现 NullPointerException,请发布堆栈跟踪。
      猜你喜欢
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      • 2014-12-22
      • 2020-12-07
      • 1970-01-01
      • 2014-01-27
      相关资源
      最近更新 更多