いくつかのレガシー コードで奇妙な問題が発生しています。これは、Windowsで実行すると機能しますが、Linuxから実行すると機能しません。
...
ResultSet rs = st.executeQuery("SELECT MODTS from MYTBL WHERE ID = 'X'");
rs.next();
Timestamp ts = Timestamp.valueOf(rs.getString(1));
System.out.println("TS: '" + ts + "'");
PreparedStatement ps = conn.prepareStatement("SELECT * from MYTBL WHERE MODTS = ?");
ps.setTimestamp(1, ts);
System.out.println("FOUND? " + ps.executeQuery().next());
これで、両方の環境が同じデータベースに接続され、両方の環境が TS 変数の値 '2013-03-10 03:35:16.0' を出力します。ただし、Windows では "FOUND? true" が表示され、Linux では "FOUND? false" が表示されます。
ここで何が起こっているのでしょうか?
注: これがここで JDBC を使用するのに最適な方法ではないことはわかっていますが、これは変更を加えることができないレガシー コードであり、ある環境で正しく動作しない理由を突き止めようとしています。
DB環境はojdbc6.jarを使ったOracle 11g
編集:さらに奇妙なのは、これがすべてのタイムスタンプで発生するのではなく、特定のタイムスタンプで発生することです。ここで何が起こっているのか本当にわかりません...