2012-02-12 2 views
0

Возникли проблемы с оператором sql для извлечения записи между двумя метками времени. Это просто дает мне исключение NullPointerException, и я думаю, что это просто синтаксическая ошибка, которую я искал, и я ничего не мог найти. Это заявление:Ошибка синтаксиса оператора SQL

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

создания заявление:

stmtGetRecordByDate = dbConnection.prepareStatement(strGetRecordByDate); 

Исключение NullPointer показывает на 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, но вы, вероятно, получаете null в stmtGetRecordByDate из-за вашего недействительного SQL.

+0

Ха-ха, да, извините заблудившийся, не был в коде просто неправильной. WHERE BETWEEN отлично работает благодаря – Ross

+0

Как использовать параметры, если я не могу использовать VALUES? – Ross

+0

@stroduces: Ваши вызовы 'stmtGetRecordByDate.setDate' связывают значения с заполнителями. 'VALUES' обычно используется только с INSERT. –

Смежные вопросы