gpt4 book ai didi

java - 带有 JDBC 准备语句的字符串中的圆括号

转载 作者:行者123 更新时间:2023-12-04 05:13:59 24 4
gpt4 key购买 nike

这是我的 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();

由于字符串中的圆括号,它不起作用。

如何在准备好的语句中转义圆括号?

编辑:根据我的回答(见下文),我的问题是正确的。

最佳答案

会自己回答 - 问题出在“~”(波浪号)中。

经过一番阐述,有一个有趣的发现:

当 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 Pattern Matching因为使用波浪号标记 JDBC 驱动程序不知道圆括号是正常字符(如我的情况)还是用于模式匹配的分组符号,将项目分组为一个逻辑项目。

关于java - 带有 JDBC 准备语句的字符串中的圆括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14538254/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com