我正面临着一种奇怪的情景。我有下表,有两列。
Customer:
Customer_ID nvarchar2
Subscription_Date Date
我正在尝试使用Meta Data获取Subscription_Date的列类型,如下所示:
ResultSet rs = selectStmt.executeQuery("SELECT Customer_ID, Subscription_Date FROM Cusomter");
java.sql.ResultSetMetaData rsMetaData = rs.getMetaData();
int type1 = rsMetaData.getColumnType(2);
如果我使用JDK 1.6和ojdbc6.jar,type1
将返回
93 (java.sql.Types.TIMESTAMP)
如果我使用JDK 1.5和ojdbc14.jar,则返回type1
91 (java.sql.Types.DATE)
但在这两种方案中,Subscription_Date的实际列类型为DATE
。
这是一个落后的兼容性问题吗?或者我的编码方式是错的?
你们可以调查一下并提出一些建议吗?
答案 0 :(得分:3)
oracle datatype of DATE
与TIMESTAMP
的SQL标准(和JDBC)概念相同,因为它存储日期+时间。 DATE
的SQL标准概念仅存储日期(年,月,日)。 ojdbc6.jar
中的行为是正确的,ojdbc14.jar
是错误的。
并非所有关系数据库服务器都使用完全相同的名称。直到存在关系数据库之后才出现SQL标准,并且一些(或大多数)继续使用它们的传统数据类型命名而不是转移到标准的名称。