My Oracle Support Banner

JDBC 11g: Timestamp から Date へのマッピング (Doc ID 1933596.1)

Last updated on APRIL 05, 2020

適用範囲:

JDBC - バージョン 11.1.0.6 から 11.2.0.3.0 [リリース 11.1 から 11.2]
この文書の内容はすべてのプラットフォームに適用されます。

目的

JDBC 10g では、Timestamp を Date へ変換するプロパティ V8Compatible が提供されていました。このプロパティは 11g で非推奨となっており、使用できません。

Timestamp 型の値を Date 型の列へ挿入し、挿入された値を DB から select すると、JDBC 11g を使用している場合には挿入した値と一致していないことが確認できます。

下記 を実行することで、現象を確認することができます。異なるバージョンのドライバで同じプログラムを実行することで結果を確認可能です。

oracle.jdbc.V8Compatible を true に設定している場合、JDBC 10g では下記の結果になります:

$ javac -cp .;"<DIR>\ojdbc14.jar" TestDate.java

$ java -cp .;"<DIR>\ojdbc14.jar" TestDate
Java Version: 1.5.0_19
URL: jdbc:oracle:thin:@//<HOSTNAME>:<PORT>/<SERVICE_NAME>
DB version: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
JDBC Version: Oracle JDBC driver - 10.2.0.4.0
Encoding:
... About to exec: select sys_context('USERENV','LANGUAGE') from dual

Row 1 : AMERICAN_AMERICA.WE8ISO8859P1
Dropping/Creating table...
execSQL() sql=: DROP TABLE TEST_DATE

execSQL() returning: 0 for SQL=DROP TABLE TEST_DATE
execSQL() sql=: CREATE TABLE TEST_DATE (DATE_FIELD Date)

execSQL() returning: 0 for SQL=CREATE TABLE TEST_DATE (DATE_FIELD Date)
Preparing stmt: INSERT INTO TEST_DATE (DATE_FIELD) VALUES (?)
Inserting ...
1



一方 JDBC 11g を使用した場合、結果が異なっています:

$ java -cp .;"<DIR>\ojdbc14.jar" TestDate
Java Version: 1.5.0_19
URL: jdbc:oracle:thin:@//<HOSTNAME>:<PORT>/<SERVICE_NAME>
DB version: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
JDBC Version: Oracle JDBC driver - 11.2.0.1.0
Encoding:
... About to exec: select sys_context('USERENV','LANGUAGE') from dual

Row 1 : AMERICAN_AMERICA.WE8ISO8859P1
Dropping/Creating table...
execSQL() sql=: DROP TABLE TEST_DATE

execSQL() returning: 0 for SQL=DROP TABLE TEST_DATE
execSQL() sql=: CREATE TABLE TEST_DATE (DATE_FIELD Date)

execSQL() returning: 0 for SQL=CREATE TABLE TEST_DATE (DATE_FIELD Date)
Preparing stmt: INSERT INTO TEST_DATE (DATE_FIELD) VALUES (?)
Inserting ...
0



解決策

To view full details, sign in with your My Oracle Support account.

Don't have a My Oracle Support account? Click to get started!


本書の内容
目的
解決策
参照情報

My Oracle Support provides customers with access to over a million knowledge articles and a vibrant support community of peers and Oracle experts.