2012-04-19 59 views
0

我在一個名爲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中執行此操作的方法。

回答

0

如果你絕對不能使用準備好的語句,這應該工作。格式化日期,然後使用相同的格式在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注入攻擊。當然,準備好的聲明表現更好。