使用Java实现,使用druid实现sql血缘关系解析,要求输出“字段A-->来源于 表名+字段名”
时间: 2024-02-27 21:52:47 浏览: 92
好的,根据您的要求,我修改了代码,输出的血缘关系格式为“字段A-->来源于 表名.字段名”,以下是示例代码:
```java
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
import com.alibaba.druid.sql.ast.statement.SQLSelect;
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
import com.alibaba.druid.sql.parser.SQLStatementParser;
public class SQLParserDemo {
public static void main(String[] args) {
String sql = "SELECT t1.id, t1.name, t2.age FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id WHERE t1.age > 18";
SQLStatementParser parser = new MySqlStatementParser(sql);
SQLStatement statement = parser.parseStatement();
if (statement instanceof SQLSelect) {
SQLSelect select = (SQLSelect) statement;
select.getSelectList().forEach(item -> {
if (item.getExpr() instanceof SQLIdentifierExpr) {
String fieldName = ((SQLIdentifierExpr) item.getExpr()).getName();
String tableName = item.getParent().getParent().toString();
System.out.println(fieldName + " --> 来源于 " + tableName.replace(".", "+"));
}
});
}
}
}
```
在这个示例代码中,我在输出时对表名和字段名之间的“.”进行了替换,替换为“+”,以满足您的要求。您可以将示例代码中的 SQL 语句替换为您需要解析的 SQL 语句,然后运行代码,即可输出字段的血缘关系。同样需要注意的是,这个示例代码只能解析 SELECT 语句中的字段血缘关系,如果您需要解析更复杂的 SQL 语句血缘关系,需要根据具体情况进行相应的修改。
阅读全文