Druid修改sql表名、修改sql别名,查询sql表名
1、获取表名、查询字段、查询条件等
package test;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
import com.alibaba.druid.stat.TableStat;
import com.alibaba.druid.stat.TableStat.Column;
import com.alibaba.druid.stat.TableStat.Condition;
import com.alibaba.druid.util.JdbcConstants;
public class Test2 {
public static void main(String[] args) throws Exception {
String dbType = JdbcConstants.ORACLE; // JdbcConstants.MYSQL或者JdbcConstants.POSTGRESQL
String sql = "select t1.id,t2.name from t1,t2 where t1.id=2 or t2.name='lhs' ";
List<SQLStatement> stmtList = SQLUtils.parseStatements(sql, dbType);
// 格式化输出
String formatsql = SQLUtils.format(sql, dbType);
System.out.println("格式化");
System.out.println(formatsql);
for (SQLStatement stmt : stmtList) {
// MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor();
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
stmt.accept(visitor);
// 获取表名
System.out.println("获取表名");
Map<TableStat.Name, TableStat> tables = visitor.getTables();
Set<TableStat.Name> tableNameSet = tables.keySet();
for (TableStat.Name name : tableNameSet) {
String tableName = name.getName();
System.out.println(tableName);
}
System.out.println("获取查询列名");
// 获取查询列名
Collection<Column> columns = visitor.getColumns();
for (Column column : columns) {
if (column.isSelect()) {
String table = column.getTable();
String name = column.getName();
System.out.println(table + "." + name);
}
}
System.out.println("获取查询条件");
// 获取查询条件
List<Condition> conditions = visitor.getConditions();
for (Condition condition : conditions) {
Column column = condition.getColumn();
String table = column.getTable();
String name = column.getName();
String operator = condition.getOperator();// 比如=、like、in
System.out.println();
System.out.print(table + "." + name + operator);
List<Object> values = condition.getValues();
for (Object value : values) {
System.out.print(value);
}
}
}
}
}
2、修改表名
package test;
import java.util.List;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectTableReference;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitorAdapter;
import com.alibaba.druid.util.JdbcConstants;
public class alibaba {
public static void main(String[] args) {
String dbType = JdbcConstants.ORACLE; // JdbcConstants.MYSQL或者JdbcConstants.POSTGRESQL
String sql = "select * from table where a=$end";
List<SQLStatement> stmtList = SQLUtils.parseStatements(sql, dbType);
ExportTableAliasVisitor visitor = new ExportTableAliasVisitor();
for (SQLStatement stmt : stmtList) {
stmt.accept(visitor);
}
String sqlString = SQLUtils.toSQLString(stmtList, dbType);
System.out.println(sqlString);
}
}
class ExportTableAliasVisitor extends OracleASTVisitorAdapter {
@Override
public boolean visit(OracleSelectTableReference x) {
//String alias = x.getAlias();//别名
//SQLExpr expr = x.getExpr();//表名
//x.setExpr("mymymytable");//修改表名
//x.setAlias("aa");//修改别名
System.out.println(x.getExpr().toString());
return true;
}
}
官方文档:https://github.com/alibaba/druid/wiki/Druid_SQL_AST
https://github.com/alibaba/druid/wiki/SQL-Parser
还没有评论,来说两句吧...