JAVA解析sql表别名_Java中通过druid修改sql中表名、别名

场景

在项目中如有一条查询语句,需要将其中表名所在的库名补充上(库名已知),

例如:select id from a,表a所在库叫d,那么需要修改为select id from d.a

初步思考

所以最开始打算用正则,不区分大小写的形式匹配到from+空格+不带点、不带空格的字符串,然后将第三部分替换。

有了如下代码:

private String dealSql(String sql, String dbName) {

sql = sql.replaceAll("\\s+", " ").replace(";"," ");

String result = sql;

String p = "(from)(\\s+)([^\\s]+)";

Pattern pattern = Pattern.compile(p, Pattern.CASE_INSENSITIVE);

Matcher matcher = pattern.matcher(sql);

while (matcher.find()) {

if(matcher.groupCount() == 3) {

if(!matcher.group(3).contains(".")) {

result = matcher.replaceAll("$1$2" + dbName + ".$3");

}

}

}

return result;

}

经过测试

85aaf2f7931440bd4768bd385813e2d5.png

深入思考

貌似结果是正确的,但是由于sql不可能只有这样一种情况,还会有诸如以下形式产生:

多表查询,使用where关联selec

你可能感兴趣的:(JAVA解析sql表别名)