0

私は奇妙な種類のシナリオに直面しています。次のテーブルがあり、2 つの列があります。

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 データ型はDATETIMESTAMP、日付と時刻を格納するため、SQL 標準 (および JDBC) の概念と同じです。日付のみを格納するという SQL 標準の概念DATE(つまり、年、月、日)。の動作ojdbc6.jarは正しく、ojdbc14.jar間違っていました。

すべてのリレーショナル データベース サーバーがまったく同じ名前を使用しているわけではありません。SQL 標準は、リレーショナル データベースが登場するまで出現しませんでした。一部 (またはほとんど) は、標準の名前に移行する代わりに、データ型に従来の命名法を使用し続けました。

于 2013-03-28T10:51:53.600 に答える