0

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

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. 这是一些向后兼容性问题吗?还是我的编码方式不对?各位大佬能看一下,给点建议吗?

4

1 回答 1

3

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

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

于 2013-03-28T10:51:53.600 回答