JDBC - ORA-01861:文本与格式字符串 01861 不匹配



我在从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

请帮我解决这个问题

切勿将日期或时间戳值作为字符串传递。

使用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实际上是一个时间戳,因此最好使用时间戳值。

每当你想插入一个日期时,在PrepareStatement类的帮助下插入它,因为它在内置函数中转换java.util.date(带有名称和数字的完整时间戳(---->将其转换为java.sql.Date(2018-09-06格式(,然后使用此sql日期将准备语句为ps.setDate(格式将变为:09-jan-1996(,这是oracle可以接受的。

注意:将使用日期转换为SQL日期时,传递时间而不是整个日期。

相关内容

  • 没有找到相关文章

最新更新