2015-03-23 2 views
0

Я получаю эту ошибку, когда пытаюсь выполнить этот фрагмент кода. Когда я удаляю кавычки вопросительных знаков, тогда он говорит: «У вас есть ошибка в синтаксисе SQL»; Может ли кто-нибудь помочь мне исправить это?SQL Параметр ошибки индекса

String query = "select date from ticket where date >='?' and date <= '?' "; 

     PreparedStatement pstmt1 = con.prepareStatement(query); 
     pstmt1.setString(1, fromdate); 
     pstmt1.setString(2, todate); 
     pstmt1.executeQuery(query); 
+0

Вы не указываете параметры, просто используйте 'where date> =? и дата <=? ' – Phil

+0

Я удалил кавычки, и они говорят, что у вас есть ошибка в синтаксисе SQL –

+0

Какая ошибка? Кроме того, вы видели предложение BETWEEN, например 'WHERE date МЕЖДУ? И? ' – Phil

ответ

2

Фактическая ошибка в том, что вы выполняете сама строку запроса, а не подготовленное заявления:

pstmt1.executeQuery(query); 

Там нет в интерфейсе PreparedStatement нет executeQuery(String), вместо этого он возвращается к один из интерфейса Statement, который просто запускает строку, as-is, в качестве запроса. Это означает, что он будет жаловаться горько, потому что ? не считается действительным в этом контексте.

Вы должны просто используя (включая получение набора результатов):

ResultSet rs = pstmt1.executeQuery(); 

поэтому выполнение запроса осуществляется в подготовленном контексте заявления, а не контекст заявления.

+0

'date' является допустимым именем столбца, которому не нужны котировки идентификаторов. См. Список в этой таблице - http: // dev.mysql.com/doc/refman/5.5/en/reserved-words.html#table-reserved-words-new-5.5 – Phil

+0

Большое спасибо. Теперь он работает –

0

Не заключайте заполнители с цитатами

String query = "select date from ticket where date >='?' and date <= '?' "; 

Java-API будет заботиться о добавлении цитат и добавления управляющих последовательностей в специальных символов, это должно быть достаточно:

String query = "select date from ticket where date >=? and date <= ? "; 
Смежные вопросы