gpt4 book ai didi

java - 检查 JDBC String/VARCHAR 比较中的转义 %?

转载 作者:行者123 更新时间:2023-11-30 04:26:16 27 4
gpt4 key购买 nike

我正在编写一个 JDBC 库,它接受来自用户输入的 java.lang.String 对象并发出 JDBC SELECT 语句。我希望存在未转义的 % 字符来引导库在比较中使用 LIKE 子句,而对于没有未转义的 % 字符的字符串应使用更严格的=比较。

例如具有以下表格和数据:

CREATE TABLE S (V CHARACTER VARYING);
INSERT INTO S (V) VALUES ('%B%'); -- row a
INSERT INTO S (V) VALUES ('%%%'); -- row b
INSERT INTO S (V) VALUES ('%%X'); -- row c

我希望字符串 "\%\%\%"* (不包含未转义的 % 字符)导致以下查询:

SELECT * FROM S WHERE V = '%%%'

...仅匹配 1 行(b 行)。而字符串 "\%%\%" (包含一个未转义的 %)应该导致查询:

SELECT * FROM S WHERE V LIKE '\%%\%'

...仅匹配行 a 和 b(但不匹配 c)。

Java 中是否有一个实用程序类可以对未转义的 % 字符进行此类测试,并生成 = 比较所需的未转义版本(当所有 % 字符最初被转义?)

逻辑应该如下:

 if ( unescapedPercentageExists( s ) )
likeClause( s )
else
equalClause ( removeEscapes( s ) )

最佳答案

尝试正则表达式

public static boolean unescapedPercentageExists(String s){
return s.matches(".*((?<=[^\\\\])|^)%.*");
}

测试:

abc: false
abc\%: false
\%abc: false
a\%bc: false
abc%: true
%abc: true
a%bc: true

关于java - 检查 JDBC String/VARCHAR 比较中的转义 %?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15782445/

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