2017-01-17 11 views
2

Использование Scala игры anorm и MySQL, я пытаюсь сделать запрос SQL, фильтрация с помощью LIKE оператора:Anorm фильтр запроса с пунктом LIKE

import java.sql.Connection 
import anorm._ 

Class.forName("com.mysql.jdbc.Driver").newInstance() 
implicit val conn = java.sql.DriverManager.getConnection(dbUrl) 
val list = SQL"select firstName from person where lastName like '%tra%'".as(parser.*) 

Exception in thread "main" java.lang.RuntimeException: No parameter value for placeholder: 1 

здесь она должна фильтровать все лица, чьи LastName содержит «пла '. Почему он не работает? является анормальным (или java dbc), обрабатывающим «%» как особый символ? если да, то как этого избежать?

+0

Возможный дубликат [п Anorm LIKE с интерполяцией строки] (http://stackoverflow.com/questions/25146075/anorm-like-clause-with-string-interpolation) – cchantep

ответ

1

Если вы ожидали, что предложение WHERE является чем-то вроде «% pattern%», вам нужно будет подготовить строку перед передачей ее в качестве аргумента.

SQL"""SELECT firstName FROM person WHERE lastName LIKE ${"%"+tra+"%"}""". 
as(userParser.*) 
+0

ТНХА. можете ли вы это объяснить? «особенный характер»? кто это делает, anorm (я так не думаю) или java sql? любая ссылка на это? можно ли избежать этого? Я попытался убежать с помощью 'LIKE '\\% tra \\%'' или 'LIKE '!% tra!%' ESCAPE '!'', но не сработал. –

+0

'%' является символом подстановки (по крайней мере, в Oracle). Драйвер MySQL JDBC сохраняет подготовленные операторы на стороне клиента. Таким образом, использование подготовленных операторов с переменными связывания намного быстрее, потому что это означает, что Oracle не нужно снова и снова анализировать (компилировать) SQL-команды. –

+0

Заполнитель JDBC - это:: http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html Выполнение исходного запроса непосредственно на mysql (без JDBC) выполняется нормально. Ваш пример можно упростить как 'LIKE $ {"% tra% "}'. так, является ли этот символ% интерпретированным анормой? или кем? Мне нужна ссылка на это. –