Использование MySQL select в Java как строка

#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. Если этот ответ решил вашу проблему, подумайте о том, чтобы принять его.