#java #mysql
#java #mysql
Вопрос:
У меня проблема с выполнением запроса в моей Java-программе. Вот код:
String selected=offersList.getSelectedValue();
String sql="SELECT * from outcoming_offers where about='" selected "'";
pst=con.prepareStatement(sql);
rs=pst.executeQuery();
И когда в ‘selected’ есть одинарные кавычки — это выдает мне ошибку:
У вас ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом…..
Итак, я понимаю, почему возникает ошибка, но мне интересно, как заставить это работать. Существуют ли какие-либо другие способы, кроме concat()?
Комментарии:
1. Почему вы не используете параметр
String sql="SELECT * from outcoming_offers where about= ?"; ps.setString(1, selected);
Ответ №1:
Всегда лучшим подходом является использование подготовленных инструкций вместо конкатенации необработанных строк SQL.
Из вашего примера вы должны написать подготовленный запрос, как показано ниже (передаваемый параметр заменяется вопросительными знаками):
String sql="SELECT * from outcoming_offers where about=?";
PreparedStatement ps = con.preparedStatement(sql);
А затем просто введите значения параметров и выполните запрос:
ps.setString(1, selected);
ResultSet rs = ps.executeQuery();
Благодаря этому подходу вам не придется иметь дело со строкой запроса SQL и одинарными кавычками, что очень часто приводит к ошибкам, а также (что очень важно) ваш код не подвержен атакам SQL-инъекций.
Дополнительная информация в документации:https://docs.oracle.com/javase/8/docs/api/java/sql/package-summary.html
Ответ №2:
Вы используете подготовленную инструкцию, но не передаете требуемый параметр, как следовало бы.
Измените оператор на этот:
String sql="SELECT * from outcoming_offers where about=?";
и затем передайте параметр:
pst=con.prepareStatement(sql);
pst.setString(1, selected);
Таким образом, вы устанавливаете selected
в качестве первого параметра подготовленной инструкции.
Теперь вы можете выполнить запрос:
rs=pst.executeQuery();
Комментарии:
1. Если этот ответ решил вашу проблему, подумайте о том, чтобы принять его.