这是我的 Java JDBC 代码(例如修改和简化的):
ps = connection.prepareStatement("SELECT a,b,c FROM mytable WHERE category ~ ?");
ps.setString(1, "my/super/category/abc(def");
^
|
+---------------------------------+
|
//this character is problem
result = ps.executeQuery();
由于字符串中的圆括号,它不起作用。
如何在准备好的语句中转义圆括号?
编辑:根据我的回答(见下文)我确实纠正了问题。
我会回答自己 - 问题在“~”(波形符)中。
经过一番阐述后,有一个有趣的发现:
当SQL代码是这样时(参见SQL代码中的“等于”标记):
ps = connection.prepareStatement("SELECT a,b,c FROM mytable WHERE category = ?");
不需要逃避。但是当 SQL 代码是这样的时候(参见 SQL 代码中的“波浪号”标记):
ps = connection.prepareStatement("SELECT a,b,c FROM mytable WHERE category ~ ?");
如果有特殊字符,则需要进行转义,在本例中为“(”或“)”:
ps.setString(1, "super/category/abc(def".replaceAll("\\(", "\\\\(")));
这是因为模式匹配:PostgreSQL 模式匹配 http://www.postgresql.org/docs/9.0/static/functions-matching.html因为使用波形符标记 JDBC 驱动程序不知道圆括号是否是普通字符(如我的情况)或用于模式匹配的分组符号,将哪些组项分组到一个逻辑项中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)