Как использовать MySQL как оператор в JDBC? - PullRequest
5 голосов
/ 06 июля 2011

В моем коде есть следующий синтаксис, но он не работает, когда я пытаюсь использовать оператор LIKE в JDBC. Это прекрасно работает, когда оно просто равно:

ResultSet resultSet = statement.executeQuery("SELECT * 
                                                FROM drawings 
                                               WHERE name = '"+ DT +"'");

Но если я хочу использовать оператор LIKE для поиска в качестве подстановочного знака, я получаю сообщение об ошибке, в котором говорится, что «%» не является допустимым символом. Как правильно использовать оператор LIKE?

1 Ответ

17 голосов
/ 06 июля 2011

Из комментариев:

query=("SELECT * FROM drawings WHERE name LIKE '"%DT%"'");

Не компилируется.Если предположить, что DT является переменной, то она должна выглядеть как

query = "SELECT * FROM drawings WHERE name LIKE '%" + DT + "%'";

(обратите внимание на подсветку синтаксиса, % должна быть частью строки SQL!)

Однако объединение управляемых пользователем строковых переменных, подобных этому, в запросе SQL открывает двери в ширину для успешных SQL-инъекций атак . Узнайте , как использовать PreparedStatement и используйте его вместо этого.

String sql = "SELECT * FROM drawings WHERE name LIKE ?";
// ...
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, "%" + DT + "%");
resultSet = preparedStatement.executeQuery();
// ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...