2012-02-12 22 views
0

2つのタイムスタンプ間でレコードを取得するSQL文に問題があります。これはちょうど私にNullPointerExceptionを与えているだけで、構文エラーだと思います。私は検索していて、何も見つかりませんでした。これは、ステートメントである:文を作成SQL文の構文エラー

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

stmtGetRecordByDate = dbConnection.prepareStatement(strGetRecordByDate); 

nullポインタ例外が)(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の側面についてはわかりませんが、無効なSQLのためnullstmtGetRecordByDateになっている可能性があります。

+0

ハハええ、迷惑行為は、コード内に誤ったタイプではなかった。どうすれば完璧に働いたのですか – Ross

+0

どうすればVALUESを使用できない場合でもパラメータを使用できますか? – Ross

+0

@stroduces:あなたの 'stmtGetRecordByDate.setDate'呼び出しは値をプレースホルダにバインドします。 'VALUES'は通常INSERTでのみ使用されます。 –