使用druid的sql parser,怎样取得update、delete语句的实际表名

Sy9876 2016-09-13 11:59:31
对于使用了别名的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
...全文
1472 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
cfwhatif 2018-09-07
  • 打赏
  • 举报
回复
使用 visitor.getAliasMap(),查找一下,应该可以获得原始表名。
Sy9876 2016-09-28
  • 打赏
  • 举报
回复
哪位帮忙回复一下。任意回复就结贴送分!

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧