0

我在一个名为 DOWNLOAD_TAB 的数据库表中有一个时间戳列名称 DOWNLOAD_DATE。

当我打开 Oracle SQL Developer 时,最大日期是“24.02.12 13:48:39,286000000”

select TO_CHAR (MAX(DOWNLOAD_DATE)) from DOWNLOAD_TAB

但是上面的查询将日期返回为“24.02.12 13:48:39,286”

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

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

有人可以建议我使用 java.sql.Statement 在 java 中执行此操作吗?

4

1 回答 1

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 注入攻击。当然,准备好的语句表现更好。

于 2012-04-19T18:06:43.957 回答