package org.example;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.ast.statement.SQLUseStatement;
import com.alibaba.druid.sql.visitor.SchemaStatVisitor;
import com.alibaba.druid.stat.TableStat;
import com.alibaba.druid.util.JdbcConstants;
import java.util.*;
public class Main {
public static void main(String[] args) {
String dbType = JdbcConstants.POSTGRESQL; // JdbcConstants.MYSQL或者JdbcConstants.POSTGRESQL
String sql = "insert into new_table(id_new,name_new) " +
" select id,name from mytable a where a.id = 3; " +
" insert into new_table_1(id_1,name_1) " +
" select dt_1.id_new,dt_1.name_new from new_table dt_1 left join mytable a on a.id=dt_1.id;" +
" create table temp_table_3 as " +
" (select dt_1.id code,dt_1.name code_name from new_table_1 dt_1 left join new_table a on a.id=dt_1.id);" +
" insert into result_dt(code,code_name) select code,name from temp_table_3;";
List<SQLStatement> stmtList = SQLUtils.parseStatements(sql, dbType);
String database="default";
for (SQLStatement stmt : stmtList) {
SchemaStatVisitor statVisitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.POSTGRESQL);
if (stmt instanceof SQLUseStatement) {
database = ((SQLUseStatement) stmt).getDatabase().getSimpleName().toUpperCase();
}
stmt.accept(statVisitor);
Map<TableStat.Name, TableStat> tables = statVisitor.getTables();
Collection<TableStat.Column> columns= statVisitor.getColumns();
if (tables != null) {
final String db = database;
tables.forEach((tableName, stat) -> {
if (stat.getCreateCount() > 0 || stat.getInsertCount() > 0) {
String to = tableName.getName().toLowerCase();
System.out.println("to: "+to);
columns.stream().filter(dc-> Objects.equals(dc.getTable().toLowerCase(),tableName.getName().toLowerCase())).forEach(
dc->{
System.out.println("to: "+dc.getTable().toLowerCase()+"."+dc.getName().toLowerCase());
}
);
} else if (stat.getSelectCount() > 0) {
String from = tableName.getName().toLowerCase();
System.out.println("from: "+from);
columns.stream().filter(dc-> Objects.equals(dc.getTable().toLowerCase(),tableName.getName().toLowerCase())&&dc.isSelect()).forEach(
dc->{
System.out.println("select : "+ dc.getTable().toLowerCase()+"."+dc.getName().toLowerCase());
}
);
}
});
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
sqlkinship.zip (11个子文件)
sqlkinship
pom.xml 1KB
target
classes
org
example
ExportTableAliasVisitor.class 1KB
Main.class 6KB
generated-sources
annotations
src
test
java
main
resources
java
org
example
ExportTableAliasVisitor.java 661B
Main.java 3KB
.idea
misc.xml 537B
jarRepositories.xml 1KB
encodings.xml 261B
compiler.xml 531B
workspace.xml 3KB
.gitignore 182B
共 11 条
- 1
资源评论
——1——
- 粉丝: 6
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功