场景:在项目中根据数据源id和指定表查询表中所有字段。
在使用Oracle数据库查询时候,SYSTEM库中的表带有'$'符号,在调用接口之后后端直接抛出异常。
根据异常信息发现异常出现在拼接sql时使用了String中的replaceAll方法。
原因:
使用String的replaceAll(regex, replacement)方法的时候,如果参数replacement中出现特殊符号如“$”,“$“符号处理会按照 $1的分组模式进行匹配。当编译器发现$后跟的不是整数的时候,就会抛出“Illegal group reference”的异常。
解决:
调用Matcher类中quoteReplacement的方法进行转义
String tableName = Matcher.quoteReplacement((String) map.get("tableName"));