2013-10-10 158 views
0

我想要獲取SQL語句以選擇時間戳在兩個給定時間戳之間的行。這是我的嘗試。 (這是一個Java servlet,我的Java時間戳對象SQL選擇時間戳列在兩個時間戳之間

SELECT * FROM dates WHERE dateAvailable >= " + from.toString() + " AND dateAvailable <= " + to.toString(); 

,其中來自並有時間戳對象 這是給我嘗試準備語句時,語法錯誤,請幫忙

+2

**附註**:這種查詢方式對於SQL注入極其脆弱。使用[Prepared Statements](準備好的語句)(http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html)向查詢中添加值,而不是將它們連接在一個字符串中。 – BackSlash

回答

4

JDBC有內置類型此。使用

PreparedStatement ps = con.prepareStatement(
       "SELECT * FROM dates WHERE dateAvailable BETWEEN ? AND ?"); 
ps.setTimestamp(1, from); 
ps.setTimestamp(2, to); 

您指定兩個?佔位符。您可以將這些設置爲您TimeStamp元素。

因爲它可能不會立即顯而易見,所以使用PreparedStatement的一個目的是幫助防止SQL注入。閱讀答案here瞭解更多詳情。


你不工作的原因是,Timestamp#toString()具有不與SQL工作特定的格式。

+0

+1,但我也會說_why_最好使用這個實現,而不是直接用字符串連接構建查詢:) – BackSlash

+0

@BackSlash當然,添加到其他問題/答案的鏈接。 –

-1

你必須使用DATE函數,否則你會得到奇怪的副作用。