0

我对一些遗留代码有一个奇怪的问题。这在我在 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环境是Oracle 11g,使用ojdbc6.jar

编辑:更奇怪的是,这不会发生在所有时间戳上,只是某些时间戳。我真的不明白这里发生了什么......

4

1 回答 1

1

好的,我能够找到解决方案。这个问题仍然暗示着我,但这至少解决了它。

改变:

ps.setTimestamp(1, ts);

至:

ps.setTimestamp(1, ts, Calendar.getInstance(TimeZone.getDefault()));
于 2013-06-18T15:54:05.143 回答