Druid修改sql表名、修改sql别名,查询sql表名

- 日理万妓 2023-10-06 11:31 112阅读 0赞

1、获取表名、查询字段、查询条件等

  1. package test;
  2. import java.util.Collection;
  3. import java.util.List;
  4. import java.util.Map;
  5. import java.util.Set;
  6. import com.alibaba.druid.sql.SQLUtils;
  7. import com.alibaba.druid.sql.ast.SQLStatement;
  8. import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
  9. import com.alibaba.druid.stat.TableStat;
  10. import com.alibaba.druid.stat.TableStat.Column;
  11. import com.alibaba.druid.stat.TableStat.Condition;
  12. import com.alibaba.druid.util.JdbcConstants;
  13. public class Test2 {
  14. public static void main(String[] args) throws Exception {
  15. String dbType = JdbcConstants.ORACLE; // JdbcConstants.MYSQL或者JdbcConstants.POSTGRESQL
  16. String sql = "select t1.id,t2.name from t1,t2 where t1.id=2 or t2.name='lhs' ";
  17. List<SQLStatement> stmtList = SQLUtils.parseStatements(sql, dbType);
  18. // 格式化输出
  19. String formatsql = SQLUtils.format(sql, dbType);
  20. System.out.println("格式化");
  21. System.out.println(formatsql);
  22. for (SQLStatement stmt : stmtList) {
  23. // MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor();
  24. OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
  25. stmt.accept(visitor);
  26. // 获取表名
  27. System.out.println("获取表名");
  28. Map<TableStat.Name, TableStat> tables = visitor.getTables();
  29. Set<TableStat.Name> tableNameSet = tables.keySet();
  30. for (TableStat.Name name : tableNameSet) {
  31. String tableName = name.getName();
  32. System.out.println(tableName);
  33. }
  34. System.out.println("获取查询列名");
  35. // 获取查询列名
  36. Collection<Column> columns = visitor.getColumns();
  37. for (Column column : columns) {
  38. if (column.isSelect()) {
  39. String table = column.getTable();
  40. String name = column.getName();
  41. System.out.println(table + "." + name);
  42. }
  43. }
  44. System.out.println("获取查询条件");
  45. // 获取查询条件
  46. List<Condition> conditions = visitor.getConditions();
  47. for (Condition condition : conditions) {
  48. Column column = condition.getColumn();
  49. String table = column.getTable();
  50. String name = column.getName();
  51. String operator = condition.getOperator();// 比如=、like、in
  52. System.out.println();
  53. System.out.print(table + "." + name + operator);
  54. List<Object> values = condition.getValues();
  55. for (Object value : values) {
  56. System.out.print(value);
  57. }
  58. }
  59. }
  60. }
  61. }

2、修改表名

  1. package test;
  2. import java.util.List;
  3. import com.alibaba.druid.sql.SQLUtils;
  4. import com.alibaba.druid.sql.ast.SQLStatement;
  5. import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectTableReference;
  6. import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitorAdapter;
  7. import com.alibaba.druid.util.JdbcConstants;
  8. public class alibaba {
  9. public static void main(String[] args) {
  10. String dbType = JdbcConstants.ORACLE; // JdbcConstants.MYSQL或者JdbcConstants.POSTGRESQL
  11. String sql = "select * from table where a=$end";
  12. List<SQLStatement> stmtList = SQLUtils.parseStatements(sql, dbType);
  13. ExportTableAliasVisitor visitor = new ExportTableAliasVisitor();
  14. for (SQLStatement stmt : stmtList) {
  15. stmt.accept(visitor);
  16. }
  17. String sqlString = SQLUtils.toSQLString(stmtList, dbType);
  18. System.out.println(sqlString);
  19. }
  20. }
  21. class ExportTableAliasVisitor extends OracleASTVisitorAdapter {
  22. @Override
  23. public boolean visit(OracleSelectTableReference x) {
  24. //String alias = x.getAlias();//别名
  25. //SQLExpr expr = x.getExpr();//表名
  26. //x.setExpr("mymymytable");//修改表名
  27. //x.setAlias("aa");//修改别名
  28. System.out.println(x.getExpr().toString());
  29. return true;
  30. }
  31. }

官方文档:https://github.com/alibaba/druid/wiki/Druid_SQL_AST

https://github.com/alibaba/druid/wiki/SQL-Parser

发表评论

表情:
评论列表 (有 0 条评论,112人围观)

还没有评论,来说两句吧...

相关阅读