2012-02-12 163 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