我正在编写一个 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 ) )