java - JDBC-ORA-01861 : literal does not match format string 01861

标签 java oracle date jdbc jdatechooser

我在从 Oracle 数据库检索数据时遇到问题
我想使用两个 JDatechoosers 访问数据...
我使用 JDatechooser 将日期值存储在日期类型的数据库中。

chooser=new JDateChooser();
chooser.setBounds (200, 175, 175, 25);
chooser.setDateFormatString("dd-MM-yyyy");
pstmt.setDate(5, new java.sql.Date(chooser.getDate().getTime()));

我想使用两个 JDatechooser 值作为备用值来访问两个日期之间的数据..

    chooser = new JDateChooser();       
    chooser.setBounds (100, 15, 100, 25);
    chooser.setDateFormatString("dd-MM-yyyy");
    chooser.addFocusListener (this);

    chooser1 = new JDateChooser();      
    chooser1.setBounds (220, 15, 100, 25);
    chooser1.setDateFormatString("dd-MM-yyyy");
    chooser1.addFocusListener (this);

   ResultSet rs = st.executeQuery("SELECT * FROM Bill WHERE B_DATE BETWEEN '"+new java.sql.Date(chooser.getDate().getTime())+"' AND '"+new java.sql.Date(chooser1.getDate().getTime())+"' ");

我收到的错误为

SQL Error: ORA-01861: literal does not match format string 01861

请帮我解决这个问题

最佳答案

切勿将 DATE 或 TIMESTAMP 值作为字符串传递。

使用 PreparedStatement 并传递 java.sql.Datejava.sql.Timestamp 的实例

PreparedStatement pstmt = conn.prepareStatement(
    "SELECT * FROM Bill WHERE B_DATE BETWEEN ? and ?");

pstmt.setDate(1,new java.sql.Date(chooser.getDate().getTime()));
pstmt.setDate(2,new java.sql.Date(chooser1.getDate().getTime()));

ResultSet rs = st.executeQuery();
while (rs.next()) {
   ....
}

这样您就不必担心格式化日期或时间戳值。

由于 Oracle DATE 实际上是时间戳,因此您最好使用时间戳值。

关于java - JDBC-ORA-01861 : literal does not match format string 01861,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43116673/

相关文章:

java - 如何使用用户界面 :style defined CSS lables in my Widget Class?

java - android 中添加/编辑/删除联系人的事件

date - BigQuery (BQ) - 删除分区

Javascript 日期时间字符串转 UTC 日期时间和 UTC 转本地日期时间

java - Eclipse 插件开发的正确日志记录

java - Spring 为有效 URL 生成 404

mysql - 需要数据库设计规范化帮助 (5nf)

java - 用于管理(身份验证/订阅更改)用户的 OPSS

java - 直接从数据库发布 Web 服务

MySQL 按日期分组并计算包括缺失日期