在grails准备声明中使用like时引发异常

时间:2014-04-02 11:44:16

标签: sql hibernate grails prepared-statement

由于我无法使用Hibernate createCriteria实现所需的查询,因此我坚持使用常见的Mysql连接。但是当我使用参数化查询时,我的查询的一部分由于某种原因失败了。 返回数据源连接的代码是

def getSqlInstance(){            
def conn = dataSource.connection
Sql sql = new Sql(conn)
return sql;
}

当我使用 的一些变体

的查询时

def conn = getSqlInstance(); 
def result = conn.rows("select distinct u.user_id from user_role u inner join (select id from role where authority like %:roles% )r on u.role_id = r.id",params)

我收到以下异常

您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在第1行的u.role_id = r.id'附近的'%'附近使用正确的语法.Stacktrace如下: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法中有错误;检查与您的MySQL服务器版本对应的手册,以便在'%'附近使用正确的语法。)在第1行的u.role_id = r.id'

请有人帮忙解决这个问题

2 个答案:

答案 0 :(得分:1)

我弄清楚我做错了什么,我不得不将%表示为要传递给自己的地图的一部分。我使用

获得了预期的结果
`def result = conn.rows("select distinct u.user_id from user_role u inner join (select id from role where authority like ? )r on u.role_id = r.id","%"+role+"%")`

答案 1 :(得分:1)

另一个解决方案是基于SQL的

def result = conn.rows("select distinct u.user_id from user_role u inner join 
                        (select id from role where authority like 
                         concat('%',:roles,'%') ) r on u.role_id = r.id",
                       params)