如何在包含变量赋值的jdbc的mysql查询中转义冒号(:)?

时间:2014-01-21 16:29:42

标签: java mysql hibernate jdbc query-variables

我试图运行一个涉及JDBC自定义变量的查询到MySQL 5.0数据库(Hibernate 4作为ORM):

SET @rownum := 0; SELECT rnum FROM (
    SELECT (@rownum := @rownum + 1) AS rnum, col_name_a
    FROM table_name
    WHERE (col_name_b IS NULL  OR col_name_b != 'USER' )  ORDER BY col_name_a) c
WHERE col_name_a = :aValue

重置变量需要第一个SET @rownum := 0;,但那里不需要冒号(我已根据{{中的建议设置 allowMutilQuery = true ) 3}})。

问题在于以下SELECT,我继续得到:

  

org.hibernate.QueryException:参数前缀后不允许使用空格':'

有解决方法吗?我应该使用除

之外的其他方法
javax.persistence.Query q = EntityManager instance>.createNativequery(String)

q.setParameter(<param name>, <param value>)

1 个答案:

答案 0 :(得分:5)

在休眠状态下,冒号:的转义是用反斜杠完成的:

SET @rownum \:= 0; SELECT rnum FROM ( ...

或者在java中:

String sql = "SET @rownum \\:= 0; SELECT rnum FROM ( ...";