Java (jdk1.6和ojdbc6.jar)与(jdk1.5和ojdbc14.jar)

Java (jdk1.6和ojdbc6.jar)与(jdk1.5和ojdbc14.jar),java,sql,jdbc,ojdbc,Java,Sql,Jdbc,Ojdbc,我面临着一种奇怪的情况。我有下表,有两列 Customer: Customer_ID nvarchar2 Subscription_Date Date 我正在尝试使用元数据获取Subscription_Date的列类型,如下所示: ResultSet rs = selectStmt.executeQuery("SELECT Customer_ID, Subscription_Date FROM Cusomter"); java.sql.ResultSetMetaData rsMetaData

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

Customer:

Customer_ID nvarchar2
Subscription_Date Date
我正在尝试使用元数据获取Subscription_Date的列类型,如下所示:

ResultSet rs = selectStmt.executeQuery("SELECT Customer_ID, Subscription_Date FROM Cusomter");
java.sql.ResultSetMetaData rsMetaData = rs.getMetaData();
int type1 = rsMetaData.getColumnType(2);
如果我使用JDK1.6和ojdbc6.jar,
type1
返回为

93 (java.sql.Types.TIMESTAMP)
如果我使用JDK1.5和ojdbc14.jar,
type1
返回为

91 (java.sql.Types.DATE)
但在这两种情况下,订阅日期的实际列类型都是
Date
。 这是向后兼容的问题吗?还是我的编码方式错了? 你们能研究一下它并提供一些建议吗?

它与SQL标准(和JDBC)中时间戳的概念相同,因为它存储日期+时间。SQL标准的
DATE
概念只存储一个日期(因此年、月、月中的天)。
ojdbc6.jar
中的行为是正确的,
ojdbc14.jar
是错误的

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

这与SQL标准(和JDBC)的时间戳概念相同,因为它存储日期+时间。SQL标准的
DATE
概念只存储一个日期(因此年、月、月中的天)。
ojdbc6.jar
中的行为是正确的,
ojdbc14.jar
是错误的


并非所有关系数据库服务器都使用完全相同的名称。SQL标准是在关系数据库出现之后才出现的,一些(或大多数)数据类型一直使用其遗留命名,而不是使用标准名称。

阅读驱动程序的发行说明,这是有文档记录的。新的行为是正确的(因为旧的驱动程序将从
日期
列中“删除”时间部分),所以如果我想用JDK1.5支持ojdbc14,用JDK1.6支持ojdbc6,我应该如何继续…?如果你需要支持JDK1.5,你应该使用
ojdbc5.jar
(这也适用于Java 6).阅读驱动程序的发行说明,这是有文档记录的。新的行为是正确的(因为旧的驱动程序将从
日期
列中“删除”时间部分),因此,如果我想用JDK1.5支持ojdbc14,用JDK1.6支持ojdbc6,我应该如何继续…?如果你需要支持JDK1.5,你应该使用
ojdbc5.jar
(这也适用于Java 6)。