2011-01-23 2 views
2
sql = "select milk_rate from special_milk_rate 
     where code_producer_id=? and effective_from <= ? 
     and effective_till >= ?" 

Я получаю сообщение об ошибке в этом запросе, когда в моем JDBC кодОшибка в запросе JDBC

Исключение: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: У вас ошибка в вашем SQL синтаксиса ; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '? и effective_from < =? и effective_till> =? ' в строке 1

Но когда я запускаю его в командной строке MySQL с некоторыми значениями, он отлично работает там.

+1

Для получения дополнительных ответов вы должны добавить теги типа 'mysql',' jdbc' и 'sql'. –

+1

вопрос в порядке, есть проблема с вашим PreparedStatement. Показать код Java. – Nishant

+0

Эй кто-нибудь может мне сказать, что это за запрос? – codeomnitrix

ответ

0

Вы должны использовать подготовленные операторы вместо «нормальных» операторов, чтобы заменить вопросительные знаки на параметры.

+0

привет, я использую предварительный анализ, мой код sql = "select milk_rate from special_milk_rate, где code_producer_id = '? And effective_from <='? And effective_till> = '?" Прест = conn.prepareStatement (SQL) prest.setLong (1, ID) prest.setDate (2, sqlDate) prest.setDate (3, sqlDate) ResultSet сначала = prest.executeQuery (SQL); – amit4444

+5

Избавьтесь от одиночных кавычек в вашем подготовленном заявлении. –

+0

@ Костис правильный. Кроме того, после каждого утверждения вы, кажется, пропускаете точки с запятой. –

1
ResultSet rst= prest.executeQuery(sql); 

Это неверное описание. Он должен быть executeQuery().

sql получает переданный для выполнения при использовании Statement. Он передается в PreparedStatement вместо этого при использовании обязательных переменных. Поскольку вы используете API-интерфейс Statement, JDBC выполняет его без замены в ваших переменных привязки и задается вопросом, что делать с буквальными вопросительными знаками.

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