【问题标题】:ResultSet Meta data return TimeStamp instead of Date Oracle JDBCResultSet 元数据返回 TimeStamp 而不是 Date Oracle JDBC
【发布时间】:2018-05-22 14:45:51
【问题描述】:

我有一张表 WRITE_DATE_DATA 有列 DATE_DATADATE 类型)和 TIMESTAMP_DATATIMESTAMP(6) 类型)。

当我执行时:

ResultSet rsmeta = ps.executeQuery("Select DATE_DATA,TIMESTAMP_DATA from WRITE_DATE_DATA")
ResultSetMetaData rsmeta = resultSet.getMetaData()  ;
int imax = rsmeta.getColumnCount() ;
HashMap<String, Integer> hmRsColTypes = new HashMap<String, Integer>();
for ( int ii = 0 ; ii < imax ; ii++ )
{
  String strColumn = rsmeta.getColumnName(ii+1);
  System.out.println(rsmeta.getColumnType(ii+1));// line 1
  System.out.println(rsmeta.getColumnType(ii+1));// line 2
}

输出:

在第 1 行 - TIMESTAMP_DATA

在第 2 行 -93 键入 java.sql.TimeStamp

在第 1 行 - DATE_DATA

在第一行 - java.sql.TimeStamp 的 93 类型

DATE_DATE 的预期数据类型将为 java.sql.Date 的 91 类型

为什么ResultSetMetaData 返回错误的数据类型TimeStamp 而不是Date 数据类型?

这是预期的行为吗,如果是,请分享文档或者我应该做其他事情来处理它。

【问题讨论】:

  • @MarkRotteveel 回答了这个问题是因为日期和时间戳之间的差异,我不是在问差异,我在 ResultSetMetaData 中得到错误的列数据类型。这是预期的行为还是我应该做其他事情

标签: java oracle date jdbc timestamp


【解决方案1】:

显示的输出是正确的。就 JDBC(和 SQL 标准)而言,Oracle DATEjava.sql.Timestamp (java.sql.Types.TIMESTAMP),因为它同时具有日期和时间组件。

Oracle DATE 根本不是 JDBC 和 SQL 标准中定义的日期。 java.sql.Date(和java.sql.Types.DATE)用于只有日期组件(日、月、年)的类型。

另请参阅:Difference between oracle DATE and TIMESTAMP

【讨论】:

  • 如果两者的行为相同,那么 Date 类型本身需要什么。有没有Oracle官方文档详细说明了这个问题。
  • @Afgan oracle DATE 类型早于 SQL 标准,那个时代的其他数据库也有同样的“问题”(例如,不推荐使用的方言 1 中的 Firebird,日期也是时间戳),Oracle 后来引入了TIMESTAMP,它提供了更接近SQL标准的亚秒级精度选项。而且,关于“是否有任何 Oracle 官方文档,详细说明了这个问题。” 可能,但你应该自己搜索,SO 不是“机械土耳其人”搜索引擎。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-09
  • 2020-04-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多