会回答自己-问题出在“〜”(波浪号)中。
经过详细阐述,有一个有趣的发现:
如果是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模式匹配,因为带有波浪号的JDBC驱动程序不知道圆括号是正常字符(例如我的情况)还是模式匹配的分组符号,这些模式将哪些项组合成一个逻辑项。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)