我遇到一些遗留代码的奇怪问题。这在我在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中我在linux中得到“FOUND?true”我得到“FOUND?false”。
知道会发生什么事吗?
注意:我知道这不是在这里使用JDBC的最佳方式,但这是遗留代码,我无法对其进行更改,并且我试图弄清楚为什么它在一个环境中无法正常工作。
数据库环境是Oracle 11g,使用ojdbc6.jar
编辑:更奇怪的是,这不会发生在所有时间戳上,只是某些时间戳。我真的不知道这里发生了什么......
答案 0 :(得分:1)
好的,我能够找到解决方案。这个问题仍然存在,但这至少解决了这个问题。
变化:
ps.setTimestamp(1, ts);
要:
ps.setTimestamp(1, ts, Calendar.getInstance(TimeZone.getDefault()));