Scala Anorm使用LIKE子句筛选查询

Scala Anorm使用LIKE子句筛选查询,scala,anorm,Scala,Anorm,使用scala play anorm和mysql,我尝试进行sql查询,使用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 pe

使用scala play anorm和mysql,我尝试进行sql查询,使用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
在这里,它应该过滤姓氏包含“tra”字符串的所有人。 为什么它不起作用?
anorm(或java dbc)是否将“%”视为特殊字符?如果是,如何转义?

如果您希望WHERE子句类似于“%pattern%”,则必须在将其作为参数传递之前准备字符串

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

谢谢。你能解释一下吗?“%”是特殊字符吗?谁在这么做,anorm(我不这么认为)还是JavaSQL?这方面有什么参考资料吗?有可能逃脱吗?我试着用
如'\\%tra\\%'
如'!%来转义它茶!%'逃走,但不起作用。“%”是一个通配符(至少在Oracle中是这样)。MySQL JDBC驱动程序将准备好的语句保存在客户端。因此,使用带有绑定变量的预处理语句要快得多,因为这意味着Oracle不必反复解析(编译)sql语句。JDBC占位符是?:直接在mysql上执行原始查询(不使用JDBC)运行正常。您的示例可以简化为${“%tra%”之类的
。那么,这个%字符是由阿诺姆解释的吗?还是谁干的?我需要这方面的参考。
%
由数据库解释。可能存在重复的