2013-04-30 23 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

結束語:閱讀並理解在提供的鏈接處準備好的語句參數。