2015-11-02 2 views
0

я получаю сообщение об ошибке, когда я пытаюсь выполнить запрос: UPDATEПроблемы с синтаксисом SQL при использовании JDBC и подготовленные заявления

У Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с?? в строке 1

И это код у меня есть:

sql = "UPDATE object_1_ SET attr_2_ = ?"; 
prepared = dbConnection.prepareStatement(sql); 
prepared.setString(1, "abc"); 
prepared.executeUpdate(); 

Однако, если я немного изменить код и удалить параметры:

sql = "UPDATE object_1_ SET attr_2_ = 'abc'"; 
prepared = dbConnection.prepareStatement(sql); 
prepared.executeUpdate(); 

затем он работает. Итак, мне интересно, что я здесь делаю неправильно?

+0

Вы должны поставить значение строки как 'prepared.setString (1, «abc»), 'включая '. –

+0

Действительно ??? Я думал, что подготовленные заявления существуют, чтобы полностью удалить все эти головные боли при цитировании, слэшах и т. Д. Я думаю, вы не правы. Кроме того, в реальном мире у меня будет переменная типа 'prepare.setString (1, val);'. Я проверил этот случай, и он также не работает. – Jacobian

+0

Я проверил его. На самом деле одинарные кавычки не помогли, как и ожидалось. – Jacobian

ответ

1

Проблема оказалась в том, что код был на самом деле делает

prepared.executeUpdate(sql); 

, когда он должен был делать

prepared.executeUpdate(); 
+1

Интересно, почему это работает - 'http://www.mkyong.com/jdbc/jdbc-preparestatement-example-select-list-of-the-records/'. Я последовал этому примеру за строкой и снова получил сообщение об ошибке. Но когда я переключился на 'подготовленныйStatement.executeQuery()', он начал работать. Похоже, этот урок вводит в заблуждение. – Jacobian

+0

Да, первый пример кода на этой странице неверен. Кто-то указал это в комментариях 2 года назад, но он никогда не был исправлен. (Код «Полный пример» далее на странице верен.) –

+1

Хуже того, с MySQL это происходит только случайно (например, попробуйте оператор без параметров), в то время как спецификация JDBC требует, чтобы 'PreparedStatement' и' CallableStatement' всегда выдавали 'SQLException', когда' executeXXXX (String) 'методы называются. –

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