我对一些遗留代码有一个奇怪的问题。这在我在 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
编辑:更奇怪的是,这不会发生在所有时间戳上,只是某些时间戳。我真的不明白这里发生了什么......