我在寫一個JDBC庫,它接受來自用戶輸入的java.lang.String對象併發出JDBC SELECT語句。我想轉義%人物的存在導致庫使用LIKE子句中的比較,而絃樂沒有轉義%字符嚴格=比較應該被使用。檢查JDBC String/VARCHAR比較中的轉義百分比?
E.g.以下表和數據:
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行)。而String 「\ %% \%」(其中包含一個轉義%)應導致查詢:
SELECT * FROM S WHERE V LIKE '\%%\%'
...這將只匹配行A和B(但沒有C) 。
有沒有在Java工具類做這種測試的轉義%字符和生成必要的=比較轉義的版本(當所有%字符開始逃跑?)
應儘可能的邏輯如下:
if (unescapedPercentageExists(s))
likeClause(s)
else
equalClause (removeEscapes(s))
它不涉及逃逸\字符情況下工作。例如。以下字符串序列:%,\%,\\%,\\\%,\\\\%將產生:true,false,false,false,false應該是:true,false,true,false ,真的。 –