使用jdbc在Oracle SQL中过滤特定日期范围内的数据

时间:2018-08-01 14:40:35

标签: java sql oracle

我需要在特定日期范围之间选择一些数据集,该表的日期和时间为"23-JUL-18 04.03.02.584000000 PM"格式(TIMESTAMP(3))。

使用Java在 23-JUL-18 04.00.00 23-JUL-18 04.03.02 之间过滤数据的方法是什么。

编辑: 我需要使用准备好的语句传递日期范围,而我正在使用Java 7

提前谢谢!

1 个答案:

答案 0 :(得分:2)

如果您是通过JDBC从Java调用Oracle,那么最好的办法是使用准备好的语句:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String lower = "2018-07-23 04:00:00";
String upper = "2018-07-23 04:03:02";
LocalDateTime lowerdt = LocalDateTime.parse(lower, formatter);
LocalDateTime upperdt = LocalDateTime.parse(upper, formatter);

String sql = "SELECT * FROM yourTable WHERE ts_col BETWEEN ? AND ?;";
Statement statement = conn.createStatement(sql);
statement.setTimestamp(1, Timestamp.valueOf(lowerdt));
statement.setTimestamp(2, Timestamp.valueOf(upperdt));
ResultSet rs = statement.executeQuery();
while (rs.next()) {
    // process result set
}

这是Java 8+使用预准备语句对Oracle运行带有时间戳的select的方法。除了形成BETWEEN子句外,没有太多需要说明的地方,我们从两点的标准字符串时间戳开始。然后,我们解析为LocalDateTime,最后将它们带入java.sql.Timestamp

Here是一个有用的GitHub页面的链接,该页面显示了Java 8和Oracle以多种不同方式使用的JDBC。

编辑:以下是您如何在Java 7中执行上述操作的示例:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String lower = "2018-07-23 04:00:00";
String upper = "2018-07-23 04:03:02";
Date lowerdt = formatter.parse(lower);
Date upperdt = formatter.parse(upper);
String sql = "SELECT * FROM yourTable WHERE ts_col BETWEEN ? AND ?;";
Statement statement = conn.createStatement(sql);
statement.setTimestamp(1, new java.sql.Timestamp(lowerdt.getTime()));
statement.setTimestamp(2, new java.sql.Timestamp(upperdt.getTime()));
ResultSet rs = statement.executeQuery();
while (rs.next()) {
    // process result set
}