在Oracle中创建时间戳列的where子句,数据使用java.util.Date格式

问题描述:

我在一个名为DOWNLOAD_TAB的数据库表中有一个时间戳列名DOWNLOAD_DATE。在Oracle中创建时间戳列的where子句,数据使用java.util.Date格式

当我打开Oracle SQL Developer中的最大日期是 “12年2月24日13:48:39,286000000”

select TO_CHAR (MAX(DOWNLOAD_DATE)) from DOWNLOAD_TAB 

但查询上面返回我日期“12年2月24日13:48 :39,286“

现在我想组成一个查询,它会在某个日期后给我所有的记录,但是我在java.util.Date中有这个日期。

由于某些框架约束,我无法使用java的preparedstatement。我需要使用Statement类。

是否有人请建议我使用java.sql.Statement在java中执行此操作的方法。

如果你绝对不能使用准备好的语句,这应该工作。格式化日期,然后使用相同的格式在SQL语句中使用TO_DATE。 Oracle有一个默认格式,但我更愿意明确说明格式。

Date now = new Date(); 
String dateString = new SimpleDateFormat("yyyy-MM-dd").format(now); 
String sqlVal = "TO_DATE('" + dateString + "', 'yyyyy-mm-dd')"; 
String sql = "SELECT * FROM DOWNLOAD_TAB WHERE download_date > " + sqlValue; 

这就是为什么准备好的语句总是首选。正如你所看到的,这段代码很丑陋,容易出错,跨数据库不可移植,并且面临sql注入攻击。当然,准备好的声明表现更好。