2012-02-12 297 views
0

使用sql語句檢索兩個時間戳記之間的記錄時遇到問題。這只是給了我一個NullPointerException,我認爲這只是一個語法錯誤,我一直在四處搜索,我找不到任何東西。這是結:SQL語句語法錯誤

private static final String strGetRecordByDate = 
    "SELECT * FROM APP.MYTABLE " + 
    "WHERE MYDATE >= ?, AND MYDATE <= ? " + 
    "VALUES (?, ?)"; 

創建聲明:

stmtGetRecordByDate = dbConnection.prepareStatement(strGetRecordByDate); 

的空指針異常顯示了stmtGetRecordByDate.clearParameters():

public Vector getRecordByDate(Date datefrom, Date dateto){ 
    Vector<String> records = new Vector<String>(); 
    ResultSet results = null; 
    java.sql.Date sqlDatefrom = new java.sql.Date(datefrom.getTime()); 
    java.sql.Date sqlDateto = new java.sql.Date(dateto.getTime()); 
    try {   
     stmtGetRecordByDate.clearParameters(); 
     stmtGetRecordByDate.setDate(1, sqlDatefrom); 
     stmtGetRecordByDate.setDate(2, sqlDateto); 
     results = stmtGetRecordByDate.executeQuery(); 
     while (results.next()) { 
      int id = results.getInt(1); 
      String entry = results.getString(2); 
      records.add(entry); 
     } 
    } catch(SQLException sqle) { 
     sqle.printStackTrace(); 
    } 
    return records; 
} 

查詢的其餘部分和陳述做工精細所以我知道數據庫本身很好,但是這只是一個錯誤。

任何建議將是偉大的。 謝謝!

回答

2

不能使用在這方面一個VALUES和您在WHERE子句中有一個流浪逗號;你想這樣的:

private static final String strGetRecordByDate = 
     "SELECT * FROM APP.MYTABLE " + 
     "WHERE MYDATE >= ? AND MYDATE <= ?"; 

您還可以使用BETWEEN

private static final String strGetRecordByDate = 
     "SELECT * FROM APP.MYTABLE " + 
     "WHERE MYDATE BETWEEN ? AND ?"; 

但是這只是一個風格問題。

我不能確定的事情了Java的一面,但你可能得到在stmtGetRecordByDate一個null因爲你的SQL無效的。

+0

哈哈是啊對不起,流浪,不是在代碼只是一個misstype。在哪裏工作完全謝謝 – Ross 2012-02-12 02:50:20

+0

如何我可以使用參數,如果我不能使用VALUES? – Ross 2012-02-12 03:00:54

+0

@stroduces:你的'stmtGetRecordByDate.setDate'調用綁定值到佔位符。 'VALUES'通常只用於INSERT。 – 2012-02-12 03:11:03