2013-04-30 40 views
1

我想只提取具有相同DATE_ADD数据,并输出到table_patients使用JDateChooser从数据库检索数据?

下面是代码

 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); 

有人可能请h ELP?注意:我是一个java begginer

+0

这是什么语言? Java的? JavaScript的?请标记为这样。此外请澄清错误发生在哪一行。 – 2013-04-30 10:04:42

回答

1

这里有很多问题。

  1. 您正在将月中的某天传递给期望毫秒时间值的构造函数。这将导致您的sqlchooser日期在1970-01-01午夜之后为1到31毫秒。如果你看一下文件,你会看到java.util.Date.getDate()

    返回此Date对象表示该月的一天......

    而且构造java.sql.Date(long)

    构建使用给定的毫秒时间值的Date对象...

    还请注意t帽子java.util.Date.getDate()已弃用Calendar.get(Calendar.DAY_OF_MONTH)

  2. 您正在通过构建SQL字符串sqlchooser来显式设置日期条件,然后尝试将日期设置为准备语句的参数(但该语句没有参数)。你只需要做其中的一个。阅读Using Prepared Statements了解参数如何工作。

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

为了继续工作,你应该考虑使用Joda Time,而不是基准的Java日期/时间API,许多人认为这个API设计不好。

UPDATE(后规定的异常详细信息)

发表您的编辑,很显然,你是因为你正尝试将参数分配到没有以上参数(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

结束语:阅读并理解在提供的链接处准备好的语句参数。