2012-02-12 4 views
0

두 개의 타임 스탬프간에 레코드를 검색하는 SQL 문에 문제가 있습니다. 이건 그냥 내게 NullPointerException을주고있다. 그리고 나는 단지 구문 오류라고 생각한다. 나는 주변을 검색하고 있었고 나는 아무것도 찾을 수 없었다. 쿼리의 나머지SQL 문 구문 오류

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

과 문은 잘 작동 :

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

문을 작성 :

stmtGetRecordByDate = dbConnection.prepareStatement(strGetRecordByDate); 

nullpointer 예외가 표시 stmtGetRecordByDate.clearParameters에()이 문입니다 그래서 나는 데이터베이스 자체가 문제가 있다는 것을 알고 있습니다.

어떤 제안이 좋을 것입니다. 감사합니다.

답변

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에서만 사용됩니다. –