如何用Postgres替换Java中的单引号?
select * from where id in ('<45646300.KDSFJJSKJSDF95'fdgdfgdfgd>', 'fdgdfgdg');
我总是使用像
这样的参数select * from where id = ?;
但是在这种情况下我有问题,我在'in'语句中传递了字符串。
我想替换所有危险的字符
答案 0 :(得分:3)
最好继续使用PreparedStatement
而不是手动转义字符。
对于IN
子句,您可以动态生成具有适当数量?
的查询。
String[] input = ...;
StringBuilder b = new StringBuilder();
b.append("select * from where id in (");
b.append("?"); // Assume that input contains at least one element
for (int i = 1; i < input.length; i++) b.append(", ?");
b.append(")");
PreparedStatement s = c.prepareStatement(b.toString());
for (int i = 0; i < input.length; i++) s.setString(i + 1, input[i]);
答案 1 :(得分:1)
Apache commons API提供了多种方法来删除特定语言(如CSS,Javascript SQL等)的危险字符...
如果它有帮助,请看一下:http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/StringEscapeUtils.html
答案 2 :(得分:1)
对单引号使用标准SQL引用:
select *
from the_table
where id in ('<45646300.KDSFJJSKJSDF95''fdgdfgdfgd>', 'fdgdfgdg');
因此任何嵌入式单引号都需要写两次。
答案 3 :(得分:0)
你试过吗?
select * from TABLE_NAME where id in (?);
答案 4 :(得分:0)
有一个页面解释了不同的选项over here on the javaranch site