我有一些遺留代碼一個奇怪的問題的窗口。這在我在Windows中運行時起作用,但在我從Linux運行時不起作用。現在時間戳在Linux的數據庫查詢VS甲骨文
...
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年3月10日03:16.0:35」。然而,在Windows中,我在Linux中得到「FOUND?true」,我得到「FOUND?false」。
有什麼想法可以在這裏發生什麼?
注:我知道這是不是在這裏使用JDBC的最佳方式,但是這是遺留代碼,我不能更改我試圖弄清楚爲什麼它不是在一個環境下正常工作。
的DB環境是使用ojdbc6.jar
編輯的Oracle 11g:什麼是更奇怪的是,這不會發生在所有的時間標記,只是某些人。我真的不知道這裏發生了什麼......
什麼數據類型是'MODTS'列?什麼是從每一個平臺(可從您的Java語言環境中得到)你'NLS_DATE_FORMAT'和'NLS_TIMESTAMP_FORMAT'設置?它看起來像一個隱式轉換的問題,但不知道... –
是否'ts.getTime()'在這兩種情況下,返回相同的'long'價值? 'Timestamp.valueOf(String s)'在系統的時區中創建一個日期。 – DannyMo
我會檢查這些值並回來,同樣,ts.getTime()返回相同的,我也想出瞭如果我做對了,並使用rs.getTimestamp(),而不是字符串轉換它仍然失敗在Linux上的一些其中。 –