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

发布于 2024-11-02 23:25:09 字数 282 浏览 1 评论 0原文

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

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

我总是使用像这样的参数

select * from where id = ?;

,但在这种情况下我遇到了问题,我有“in”语句并将字符串传递给它。

我希望替换所有危险字符

How to replace single quote in Java with Postgres?

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

I always use params like

select * from where id = ?;

But in this case i have problem, where i have 'in' statement with string passed to it.

I wish to replace all dangerous chars

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

一念一轮回 2024-11-09 23:25:09

最好继续使用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]);

It would be better to continue using PreparedStatements rather than to escape characters manually.

In the case of IN clause you can generate a query with appropriate number of ?s dynamically.

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]);
木有鱼丸 2024-11-09 23:25:09

Apache commons API 提供了多种方法来删除特定语言(例如 CSS、Javascript SQL 等)的危险字符...

看看这个是否有帮助:http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/StringEscapeUtils.html< /a>

Apache commons API provides multiples ways to remove dangerous chars for specific languages such as CSS, Javascript SQL, etc...

Take a look at this if it helps : http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/StringEscapeUtils.html

意犹 2024-11-09 23:25:09

对单引号使用标准 SQL 引用:

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

因此任何嵌入的单引号都需要写入两次。

Use the standard SQL quoting for single quotes:

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

So any embedded single quote needs to be written twice.

这样的小城市 2024-11-09 23:25:09

你尝试过吗?

select * from TABLE_NAME where id in (?);

Did you try?

select * from TABLE_NAME where id in (?);
記憶穿過時間隧道 2024-11-09 23:25:09

javaranch 网站上有一个页面解释了不同的选项这里

There's a page explaining the different options over here on the javaranch site

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文