Какие символы будут выбраны из PreparedStatement? - PullRequest
5 голосов
/ 14 октября 2010

Я заметил, что когда я использую PreparedStatement, кажется, что он не экранирует некоторые символы подстановки, такие как «%» или «_». Я знаю, что их можно избежать в MySql с помощью обратной косой черты. Это заставило меня задуматься, от каких персонажей PreparedStatement сбежит?

Ответы [ 2 ]

6 голосов
/ 14 октября 2010

PreparedStatement ничего не ускользает - он опирается на поддержку базы данных для предварительно скомпилированных операторов.

То есть PreparedStatement никогда не заменяет ? s на значения параметров для формирования буквальной строки запроса,Вместо этого он отправляет строку запроса с заполнителями в базу данных и использует поддержку базы данных для привязки параметров запроса (однако это может зависеть от реализации драйвера JDBC).

0 голосов
/ 09 апреля 2012

В моем тесте он избегает одинарных кавычек, \r, \t, \n и так далее.Это работает довольно хорошо:

String sql = "INSERT INTO test(title) VALUES(?)";
PreparedStatement stmt = con.prepareStatement(sql);
String title = "I'm a \"student\" in a \t (university) \r\n";
stmt.setString(1, title);
stmt.executeUpdate();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...