使用druid的sql parser,怎样取得update、delete语句的实际表名
对于使用了别名的UPDATE和DELETE的SQL,例如
delete t2 from t_del t join t_j on t_j.id=t2.id
我希望使用sql parser,取出要操作的表名(t_del),而不是别名(t2)。
我试了下面这些方法都没有成功,取到的都是别名。
(只需要能处理insert、update、delete就可以,不用管select)
代码
MySqlStatementParser parser = new MySqlStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
SQLStatement stmt = statementList.get(0);
SQLDeleteStatement deleteStmt = (SQLDeleteStatement) stmt;
MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor();
stmt.accept(visitor);
System.out.println("DELETE visitor getCurrentTable -- " + visitor.getCurrentTable());
System.out.println("DELETE visitor getTables -- " + visitor.getTables());
System.out.println("DELETE getTableName -- " + deleteStmt.getTableName().toString());
System.out.println("DELETE getExprTableSource -- " + deleteStmt.getExprTableSource());
System.out.println("DELETE getSimpleName -- " + deleteStmt.getTableName().getSimpleName());
输出
DELETE visitor getCurrentTable -- t2
DELETE visitor getTables -- {t_del=Delete, t_j=Delete, t2=Delete}
DELETE getTableName -- t2
DELETE getExprTableSource -- t2
DELETE getSimpleName -- t2