Java 使用jdbc在Oracle sql中筛选特定日期范围内的数据

Java 使用jdbc在Oracle sql中筛选特定日期范围内的数据,java,sql,oracle,Java,Sql,Oracle,我需要在特定的日期范围内选择一些数据集,该表的日期和时间为“23-JUL-18 04.03.02.584000000 PM”格式(时间戳(3)) 使用java在23-JUL-18 04.00.00和23-JUL-18 04.03.02之间过滤数据的方法是什么 编辑: 我需要使用prepared语句传递日期范围,我使用的是Java7 提前谢谢你 如果您是通过JDBC从Java调用Oracle,那么最好使用一条准备好的语句: DateTimeFormatter formatter = DateTim

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

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

编辑: 我需要使用prepared语句传递日期范围,我使用的是Java7


提前谢谢你

如果您是通过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
}
这是Java8+使用准备好的语句对Oracle运行带有时间戳的select的方法。不需要太多解释,除了要形成
BETWEEN
子句之外,我们从两点的相当标准的字符串时间戳开始。然后,我们解析成
LocalDateTime
,最后将它们转换成
java.sql.Timestamp

是指向一个有用的GitHub页面的链接,该页面显示了JDBC与Java8和Oracle以各种不同的方式使用

编辑:下面是一个示例,说明如何在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
}

你能给我们看看你的密码吗?您正在使用的jdbc JPA…通过“使用Java”,您的意思是需要将日期范围作为Java的参数传递到查询中(通过
setTimestamp()
;或者它们是查询中的固定值?顺便说一句,时间戳列有一个内部表示,是您的客户机将其格式化为可读的值,如您所显示的值。@YCF_L“从createdtime介于?和?之间的表中选择*”&我正在使用preparedstatement@Alex是的,我需要将日期范围作为准备好的语句参数传递,但是当我使用setTimestamp()传递时,我得到了一个sql异常(ORA-00932:不一致的数据类型:预期的TIMESTAMP get NUMBER)那么你真的应该包括你正在使用的代码和你在问题中遇到的错误。现在这并不重要,因为Tim的回答告诉了你该怎么做,但是记住以后的问题。谢谢你的快速回答!但是我忘了提到我正在使用Java 7,不能在我的项目中使用上面的代码示例。你知道一种解决问题的方法吗C在Java 7中实现同样的功能我本来打算编辑我的答案,但我想大多数未来的读者都已经超过了Java 7。下面是一个例子,它将向您展示如何在Java 7中实现同样的功能。感谢您的回答Tim!@Sameera.San如果您真的陷入编写Java 7版本的困境,我可以发布一些东西。但是,我认为您可以找到答案在我的答案和教程之间。我解决了我的问题,但如果你能发布答案就太好了,因为有人会需要它。