2015-05-22 3 views
3

У меня есть небольшая проблема с моим подготовленным заявлением. Я получил ошибку ORA-00936: отсутствует выражение при выполнении executeQuery(). Можете ли вы рассказать мне, что я пропустил?Ошибка при подготовке сообщения: ORA-00936: отсутствует выражение

В моем классе конструктор.

private PreparedStatement reachOperation; 
reachOperation = connection.prepareStatement("SELECT * FROM operations WHERE account_id = ? AND (date BETWEEN ? AND ?)"); 

My method.

public List<Operation> getOperations(int number, Date from, Date to) 
      throws DataStoreException { 

      ArrayList <Operation> result = new ArrayList<Operation>(); 

     try { 

      java.sql.Date debut = new java.sql.Date(from.getTime()); 
      java.sql.Date fin = new java.sql.Date(to.getTime()); 


      reachOperation.setInt(1,number); 
      reachOperation.setDate(2,debut); 
      reachOperation.setDate(3,fin); 


      ResultSet rs = reachOperation.executeQuery(); 
      while(rs.next()){ 

      result.add(new Operation(rs.getInt(2),rs.getDouble(3),rs.getDate(4))); 

      } 
      rs.close(); 
      return result; 

     } catch (SQLException error) { 
      error.printStackTrace(); 
      return result; 
     } 

    } 

Вызов метода

List<Operation>operations = new ArrayList<>(); 
       operations = manager.getOperations(1, minDate, maxDate); 

// check just do prinln depending of the result of the boolean expression 
       check("Blahblahblah", operations != null && operations.size() == 1); 
       System.out.println("orders = " + operations); 
+0

где r u значение для числовой переменной? – Sachu

+0

Вы имеете в виду линию reachOperation.setInt (1, number); или операции вызова = manager.getOperations (1, minDate, maxDate); ? – Csi

+0

извините, что его оракул использовал «дату» – Sachu

ответ

4

date зарезервированное ключевое слово во многих СУБД, включая Oracle, где вы должны избежать его в двойные кавычки " (, которые также должны быть экранированы с\в случае строка создается с двойными котировками):

reachOperation = connection.prepareStatement("SELECT * FROM operations WHERE 
         account_id = ? AND (\"date\" BETWEEN ? AND ?)"); 
+0

Вы свободны? Вы сказали мне отскочить назад. – Csi

+0

@ Csi это не работает? – Sachu

+0

Это не так, у меня просто было больше вопросов и хотелось бы узнать, можем ли мы открыть чат-чат ^^ ' – Csi