1

我只想检索具有相同 date_Add 的数据并将其输出到 table_patients

这是代码

     private void btn_GoActionPerformed(java.awt.event.ActionEvent evt) {    

     java.util.Date chooser= choose.getDate();
     java.sql.Date sqlchooser=new java.sql.Date(chooser.getDate());

     try{
     String sql="select * from Patients_Details where Date_Add='"+sqlchooser+"'";
     pst=conn.prepareStatement(sql);
     pst.setDate(1,sqlchooser);
     rs=pst.executeQuery();
     table_patients.setModel(DbUtils.resultSetToTableModel(rs));

     }
 catch(SQLException sql)
{   sql.printStackTrace(); }
} 

但我得到这个错误

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
at org.sqlite.PrepStmt.batch(PrepStmt.java:192)
at org.sqlite.PrepStmt.setObject(PrepStmt.java:245)
at org.sqlite.PrepStmt.setDate(PrepStmt.java:290)
at employeeJFrame.btn_GoActionPerformed(employeeJFrame.java:981)
at employeeJFrame.access$1300(employeeJFrame.java:18)
at employeeJFrame$13.actionPerformed(employeeJFrame.java:391)

错误指向这一行

    pst.setDate(1,sqlchooser);

有人可以帮忙吗?注意:我是一个java初学者

4

1 回答 1

1

这里有很多问题。

  1. 您将月份中的日期传递给期望毫秒时间值的构造函数。这将导致您的sqlchooser日期在 1970 年 1 月 1 日午夜后 1 到 31 毫秒。如果您查看文档,您会看到java.util.Date.getDate()

    返回此 Date 对象表示的月份中的哪一天...

    和构造函数java.sql.Date(long)

    使用给定的毫秒时间值构造一个 Date 对象...

    另请注意,java.util.Date.getDate()不赞成使用Calendar.get(Calendar.DAY_OF_MONTH).

  2. 您通过构造 SQL 字符串来显式设置日期条件,sqlchooser然后尝试将日期设置为准备好的语句的参数(但该语句没有参数)。您只需要执行其中一项。阅读使用准备好的语句以了解参数的工作原理。

第一个问题可能会导致您没有收到任何结果。第二个问题应该是导致SQLException. 这些都不应该在您指出的线路上引起任何问题,但我建议解决这些问题并从那里继续前进。

对于未来的日期工作,您应该考虑使用Joda Time而不是基本的 Java 日期/时间 API,许多人认为后者设计不佳。

更新(提供异常详细信息后)

发布您的编辑,很明显您收到此错误,因为您试图将参数分配给没有参数的准备好的语句(上面的第 2 点)。参数由“?”表示 语句中的字符。有关详细信息,请参阅上面的链接文档。

如果您查看异常,您会看到它发生在 org.sqlite.PrepStmt.batch 方法中。这个方法的来源是:

private void batch(int pos, Object value) throws SQLException {
    checkOpen();
    if (batch == null) batch = new Object[paramCount];
    batch[batchPos + pos - 1] = value;
}

对于您的语句,paramCount==0,因此批处理Object数组的长度为 0。然后,最后一行尝试将第一个元素 (0 + 1 - 1 = 0) 设置为您传递的Date对象,这就是您获得ArrayIndexOutOfBoundsException.

底线:在提供的链接中阅读并理解准备好的语句参数。

于 2013-04-30T12:02:33.243 回答