有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在尝试运行一个查询,该查询涉及一个自定义变量,通过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;,但这里不需要冒号(我已经按照this question中的建议设置了allowMutilQuery=true

问题在于以下SELECT,我不断得到:

org.hibernate.QueryException: Space is not allowed after parameter prefix ':'

有办法吗?我应该使用其他方法吗

javax.persistence.Query q = EntityManager instance>.createNativequery(String)

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

?


共 (1) 个答案

  1. # 1 楼答案

    在hibernate中,冒号:的转义用反斜杠完成:

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

    或者在java中:

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