【问题标题】:(JDK 1.6 and ojdbc6.jar) vs (JDK 1.5 and ojdbc14.jar) [duplicate](JDK 1.6 和 ojdbc6.jar)与(JDK 1.5 和 ojdbc14.jar)[重复]
【发布时间】:2013-03-18 16:06:34
【问题描述】:

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

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);

如果我使用 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。 这是一些向后兼容性问题吗?还是我的编码方式不对? 各位大神能不能给点建议?

【问题讨论】:

  • 阅读驱动程序的发行说明,这已记录在案。新行为是正确的(因为旧驱动程序会从 DATE 列中“删除”时间部分)
  • 所以如果我想同时支持 JDK 1.5 的 ojdbc14 和 JDK 1.6 的 ojdbc6,我应该如何继续...??
  • 如果您需要支持 JDK 1.5,您应该使用 ojdbc5.jar(也适用于 Java 6)。

标签: java sql jdbc ojdbc


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-03-13
    • 2013-07-17
    • 2013-01-10
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 2023-03-18
    • 2011-01-26
    相关资源
    最近更新 更多