2013-11-23 71 views
0

PreparedStatement perst = con.prepareStatement(query);PreparedStatement改變java中的字符串?

 String S_DATE = s_date+" 00:00:00 CET"; 
     Timestamp S = Timestamp.valueOf(S_DATE); 


     String E_DATE = e_date+" 00:00:00 CET"; 
     Timestamp E = Timestamp.valueOf(E_DATE); 


     prest.setTimestamp(1,S); 
     prest.setTimestamp(2,E); 
     prest.setTimestamp(3,S); 
     prest.setTimestamp(4,E); 
     prest.setTimestamp(5,S);  
     prest.setTimestamp(6,E); 
     rs = prest.executeQuery(); 

//這樣的事情呢?但我不知道在哪裏使用setTimestamp()..非常感謝你的時間和順利!

+0

這裏有一些東西; 1)你創建時間戳的方式意味着你沒有將它們作爲UTC存儲在數據庫中。特別是當指定的時區(可能)受DST影響時,這個_may_可能會導致問題(嚴重依賴於RDBMS供應商/版本)。通常,推薦使用UTC,尤其是涉及多個時區的任何事情。 2)請閱讀[本博客](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common.aspx)for問題與'BETWEEN'和可變精度類型(如時間戳)。 –

回答

0

作爲參數傳遞的內容不是字符串參數。這是查詢本身的一部分。該參數應該只有2007-10-10 00:00:00 CET其餘的應該在查詢本身。通過這樣做,你在做什麼,查詢其實會

WHERE S_DATE BETWEEN 'TIMESTAMP ''2007-10-10 00:00:00 CET''' ... 

但不是通過時間戳作爲字符串,並使用數據庫函數將這些字符串轉換爲時間戳,你最好通過使用setTimestamp()java.sql.Timestamp實例。