< 環境 >
Oracle JDBC Thin Driver 12.1.0.2 (ojdbc7.jar利用)
JDK 8

< 事象 >
JDBC経由でOracle DatabaseのTIMESTAMP WITH TIME ZONEにUTC形式でInsertしたいのに、TZR形式でInsertされる場合がある
例えば下記のようなSQLをSQL*PlusでInsertした場合と、JDBCでInsertした場合に差異が発生する。
insert into test_update values(22,’2018-07-25 19:24:46.792′)

・SQL*Plus inset結果
25-JUL-18 07.24.46.792000 PM +09:00
・JDBC経由 inset結果
25-JUL-18 07.24.46.792000 PM ASIA/TOKYO
※TIMESTAMP WITH TIME ZONEのカラムのみ抜粋

< 解決策 >
1.書式を明記してInsert
insert into test_update values(24,’2018-07-25 19:24:47.323′,’25-JUL-18 03.16.54.752000 PM +09:00);

2.セッションのtime_zoneをUTC指定にする
下記alter文を発行してInsert
alter session set time_zone=’+09:00′

3.プログラム実行時にtime_zoneをUTC指定にする
java -Duser.timezone=+09:00 …

< 備考 >
java VMのローカルタイムゾーンが使用されており、そこがtime_zone=’ASIA/TOKYO’と同義の設定を行っているのかなと思っているが、だれがどこで制御しているのかまでは追えていない