как пропустить формирование одинарных кавычек для переменной во время подготовленного оператора? - PullRequest
0 голосов
/ 13 апреля 2020

Я использую подготовленный оператор для установки переменной сеанса, используя следующий код в подготовленном операторе.

String sessionVariable = "optimizer_search_depth"
String sessionValue = "10";
preparedStatement stmt = connection.prepareStatement("set session ? = ?");
stmt.setString(1, sessionVariable);
stmt.setString(2, sessionValue);
stmt.executeQuery();

, если я использую это, получая строку SQL, как показано ниже:

> set session 'optimizer_search_depth' = '10';

это даст исключение sql, поскольку вокруг них есть одиночная кавычка. Мне нужно сформировать запрос без одинарных кавычек, как

> set session optimizer_search_depth = 10;

1 Ответ

0 голосов
/ 13 апреля 2020

Тебе нужно немного динамо c SQL здесь. Код должен работать следующим образом:

String sessionVariable = "optimizer_search_depth"
String sessionValue = "10";
preparedStatement stmt = connection.prepareStatement(
  "set session '" + sessionVariable + "' = ?"
  );
stmt.setString(1, sessionValue);
stmt.executeQuery();

Убедитесь, что sessionVariable очень управляемый и не является свободным значением, полученным из внешнего источника, такого как веб-интерфейс или другой. В противном случае этот код будет уязвим для SQL внедрения.

...