如何用Postgres替换Java中的单引号?

时间:2011-04-21 10:15:16

标签: java postgresql

如何用Postgres替换Java中的单引号?

select * from where id in ('<45646300.KDSFJJSKJSDF95'fdgdfgdfgd>', 'fdgdfgdg');

我总是使用像

这样的参数
select * from where id = ?;

但是在这种情况下我有问题,我在'in'语句中传递了字符串。

我想替换所有危险的字符

5 个答案:

答案 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