(JDK 1.6和ojdbc6.jar)vs(JDK 1.5和ojdbc14.jar)

时间:2013-03-28 09:21:43

标签: java sql jdbc ojdbc

我正面临着一种奇怪的情景。我有下表,有两列。

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。 这是一个落后的兼容性问题吗?或者我的编码方式是错的? 你们可以调查一下并提出一些建议吗?

1 个答案:

答案 0 :(得分:3)

oracle datatype of DATETIMESTAMP的SQL标准(和JDBC)概念相同,因为它存储日期+时间。 DATE的SQL标准概念仅存储日期(年,月,日)。 ojdbc6.jar中的行为是正确的,ojdbc14.jar是错误的。

并非所有关系数据库服务器都使用完全相同的名称。直到存在关系数据库之后才出现SQL标准,并且一些(或大多数)继续使用它们的传统数据类型命名而不是转移到标准的名称。