2013-10-10 156 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函数,否则你会得到奇怪的副作用。