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

Java JDBC-ORA-01861:文本与格式字符串01861不匹配,java,oracle,date,jdbc,jdatechooser,Java,Oracle,Date,Jdbc,Jdatechooser,我在从oracle数据库检索数据时遇到问题 我想使用两个jDateChooser… 我使用JDatechooser在date类型的数据库中存储日期值 chooser=new JDateChooser(); chooser.setBounds (200, 175, 175, 25); chooser.setDateFormatString("dd-MM-yyyy"); pstmt.setDate(5, new java.sql.Date(chooser.getDate().getTime()));

我在从oracle数据库检索数据时遇到问题
我想使用两个
jDateChooser

我使用
JDatechooser
在date类型的数据库中存储日期值

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错误:ORA-01861:literal与格式字符串01861不匹配


请帮助我解决此问题,切勿将日期或时间戳值作为字符串传递

使用
PreparedStatement
并传递
java.sql.Date
java.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可以接受的


注意:在将util date转换为sql date时,传递时间不是整个日期。

出于安全原因,我认为这里更广泛的信息是在构建动态sql时使用准备好的语句和绑定变量。@释放:仅部分释放。它还涉及传递正确的数据类型,从而避免邪恶的隐式数据类型转换和关于性能,因为准备好的语句可以避免在服务器上进行硬解析。我同意。将日期存储或作为字符串处理是我最讨厌的事情之一。