2016-10-07 4 views
0

Я хочу, чтобы вставить буквальный '${a}' в таблицу, используя anorm 2.5.2, что означает, что я хочу, чтобы выполнить голый SQL-запросупобег строка интерполяции в anorm

INSERT INTO `db`.`table` (`a`) VALUES ('${a}'); 

без использования какой-либо anorm/интерполяции строки. Когда я пытаюсь сделать следующее

SQL("INSERT INTO `db`.`table` (`a`) VALUES ('${a}');").execute() 

я получаю anorm.Sql$MissingParameter: Missing parameter value исключение, потому что он пытается использовать anorm интерполяции на ${a}, но никакого значения a не доступен в объеме.

Как избежать интерполяции анома/строки $... и ${...}?

Escape a dollar sign in string interpolation, похоже, не работает здесь.

+1

Строка не является интерполяцией по строкам, поэтому вам не нужно избегать '' 'в первую очередь. Проблема не вызвана Интерполяцией строк. – Clashsoft

+0

Я должен был сказать интерполяцию анома, или что бы вы ни назвали, чтобы сделать ее более очевидной, что я имею в виду. Да, я знаю, что он не использует внутреннюю интерполяцию строк Scala, так как тогда побег $$ должен работать, а это не так. Я изменю вопрос, чтобы это отразить. – user2860570

ответ

0

Вы можете сделать ${a} Значение параметра, т.е.

SQL("""INSERT INTO db.table (a) VALUES ({x})""").on("x" -> s"$${a}") 

(s"$${a}" путь писать "${a}" без получения предупреждения о возможных недостающих интерполяторах).

То же самое можно записать то же самое, как

val lit = s"$${a}" 
SQL"""INSERT INTO db.table (a) VALUES ($lit)""" 

Ниже будет вероятно работа, но я не уверен:

SQL"INSERT INTO db.table (a) VALUES ('$${a}')" 

Он также может быть стоит спросить, если это преднамеренное поведение или ошибка: когда речь идет о параметризованных SQL-запросах, нет смысла иметь параметр внутри'.

+0

Значение в параметрах SQL никогда не должно передаваться с использованием простой строковой интерполяции или '# $' с интерполяцией Anorm, иначе это вводит риск инъекции SQL. – cchantep

+1

@cchantep Но это не параметр в соответствии с вопросом. –

+0

Использование его в 'VALUES' означает, что это – cchantep

 Смежные вопросы

  • Нет связанных вопросов^_^