ResultSet元数据返回TimeStamp而不是Date Oracle JDBC

时间:2017-12-08 10:56:27

标签: java oracle date jdbc timestamp

我的表格WRITE_DATE_DATA包含DATE_DATA列(DATE类型)和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

     

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

     

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

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

这是预期的行为,如果是,那么请分享文件或我应该做些别的事来处理它。

1 个答案:

答案 0 :(得分:2)

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

Oracle DATE根本不是JDBC和SQL标准中定义的日期。使用java.sql.Date(和java.sql.Types.DATE)适用于仅包含日期组件(日,月,年)的类型。

另请参阅:Difference between oracle DATE and TIMESTAMP