【发布时间】:2013-01-26 15:15:24
【问题描述】:
这是我的 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();
由于字符串中有圆括号,它不起作用。
如何在准备好的语句中转义圆括号?
编辑:根据我的回答(见下文),我的问题是正确的。
【问题讨论】:
-
这意味着没有真正的记录存在。您可以在数据库上执行实际查询并查看是否返回任何行吗?
-
@Subba 是的,我在控制台上测试 SQL(使用 PostgreSQL 和 PGAdmin3),圆括号需要转义:SELECT... category="my/super/category/abc\\(def " 并且它有效 - 将返回预期的记录。
-
括号在 SQL 中不需要转义。只有单引号需要。并且字符串应该用单引号括起来,而不是双引号。
-
@LadislavDANKO:您肯定不需要需要“转义”圆括号:sqlfiddle.com/#!12/1703d/1
-
我试过了,我看到了。完美运行:
select f.* from mytable f where f.id = '12345('.
标签: java sql jdbc parameters prepared-statement