Избегание одинарных кавычек в табличных SQL-запросах - PullRequest
0 голосов
/ 01 октября 2010

Использование java.sql.Preparedstatement подразумевает, что экранирование запросов будет выполняться при синтаксическом анализе запросов, это также происходит, когда у меня есть одинарные кавычки в моих данных, но когда у меня есть одинарные кавычки в самом имени таблицы, запрос не работает (я я использую Oracle 11g).

Вот мой код:

Class.forName("oracle.jdbc.OracleDriver");
con = DriverManager.getConnection(
    "jdbc:oracle:thin:client/adept@ind-db-02:1521:ind02");

PreparedStatement preparedStatement = con.prepareStatement(
    "SELECT * FROM (?) where rownum=1");

preparedStatement.setString(1,"CLIENT.\"SR'tab\"");
ResultSet rs3=preparedStatement.executeQuery();

Есть ли способ экранировать одинарные кавычки из имени таблицы с помощью подготовленного оператора?

Ответы [ 3 ]

4 голосов
/ 01 октября 2010

Заполнители PreparedStatement не предназначены для имен таблиц или столбцов, они предназначены только для фактических значений столбцов.Другими словами, вы на самом деле неправильно используете PreparedStatement.

См. Также

1 голос
/ 01 октября 2010

Я рекомендую вам изменить эти имена таблиц сейчас, чтобы предотвратить агонию в будущем. Мощные инструменты, которые мы все используем, великолепны, но когда один цвет слишком далеко за пределами линий, боль бесконечна.

0 голосов
/ 01 октября 2010

Несмотря на то, что использование параметров связывания для передачи данных в базу данных очень правильно, нельзя использовать параметры связывания для имен таблиц.

В этом случае следует правильно указать их в кавычках.

например (не проверено):

PreparedStatement preparedStatement=
  con.prepareStatement("SELECT * FROM \"CLIENT.SR'tab\" where rownum=1"); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...