SpringBoot + Druid SQL Parser 解析表名、字段名(纯Java,最佳方案)

Druid 自带的 SQL 解析器(com.alibaba.druid.sql.parser),这是Java 生态最稳定、生产环境最常用的 SQL 解析方案,完全不用 Python、不用 sqlparse!

直接复制可用的 SpringBoot 完整代码,支持:

  • 解析 SELECT / INSERT / UPDATE / DELETE
  • 解析 多表、JOIN、子查询、别名
  • 提取 所有表名 + 所有字段名
  • 兼容 MySQL、Oracle、PostgreSQL 等

  1. 引入 Druid 依赖(Maven)

com.alibaba druid 1.2.20


  1. 纯 Java 工具类(直接复制)
    自动提取:所有表名 + 所有字段
    import com.alibaba.druid.sql.SQLUtils;
    import com.alibaba.druid.sql.ast.SQLStatement;
    import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor;
    import com.alibaba.druid.stat.TableStat;
    import com.alibaba.druid.util.JdbcConstants;

import java.util.*;

/**

  • Druid SQL 解析工具(提取 表名、字段名)

    */

    public class DruidSqlParser {

    // 数据库类型:mysql / oracle / postgresql

    private static final String DB_TYPE = JdbcConstants.MYSQL;

    /**

    • 解析 SQL,返回 表名 + 字段名

      */

      public static Map<String, Set> parseSql(String sql) {

      Map<String, Set> result = new HashMap<>();

      Set tables = new HashSet<>();

      Set columns = new HashSet<>();

      try {

      // 1. 解析 SQL

      List stmtList = SQLUtils.parseStatements(sql, DB_TYPE);

      复制代码
       for (SQLStatement stmt : stmtList) {
           // 2. 使用访问器提取 表、字段
           MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor();
           stmt.accept(visitor);
      
           // 3. 提取所有表名
           for (TableStat.Name tableName : visitor.getTables().keySet()) {
               tables.add(tableName.getName());
           }
      
           // 4. 提取所有字段名(去重)
           for (TableStat.Column column : visitor.getColumns()) {
               columns.add(column.getName());
           }
       }

      } catch (Exception e) {

      e.printStackTrace();

      }

      result.put("tables", tables);

      result.put("columns", columns);

      return result;

      }

      }


  1. SpringBoot 测试接口
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    import java.util.Map;
    import java.util.Set;

@RestController

public class SqlParseController {

复制代码
@GetMapping("/parse/druid")
public String parseWithDruid(@RequestParam String sql) {
    Map<String, Set<String>> result = DruidSqlParser.parseSql(sql);
    
    return "Druid 解析结果:\n" +
           "表名:" + result.get("tables") + "\n" +
           "字段:" + result.get("columns");
}

}


  1. 测试效果(超强)
    输入 SQL
    select u.id, u.name, r.role_name
    from user u
    join role r on u.role_id = r.id
    where u.age > 18
    输出结果
    Druid 解析结果:
    表名:user, role
    字段:id, name, role_name, role_id, age

  1. 支持所有 SQL 类型
    ✅ INSERT
    insert into user(name, age) values('张三', 20)
    表:user
    字段:name, age
    ✅ UPDATE
    update user set name='李四' where id=1
    表:user
    字段:name, id
    ✅ DELETE
    delete from user where age < 18
    表:user
    字段:age

  1. 为什么推荐 Druid SQLParser?(比 sqlparse 强太多)
  2. 纯 Java,无任何第三方依赖、无 Python 环境要求
  3. 生产级稳定,阿里内部大量使用
  4. 支持复杂 SQL:join、子查询、union、with 子句、嵌套查询
  5. 自动去重,自动识别别名
  6. 速度极快,适合高性能场景

总结

  1. Druid SQLParser 是 SpringBoot 解析 SQL 最优方案
  2. 代码直接复制可用,无需改任何配置
  3. 自动提取 所有表名 + 所有字段
  4. 支持全场景 SQL:select/insert/update/delete/join/ 子查询
相关推荐
都叫我大帅哥35 分钟前
Java JJWT 完全指南:从入门到生产级实践
java
前端开发张小七2 小时前
Java 学习笔记 · 第一课:基础语法与核心概念
java·后端
ThsPool3 小时前
【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发
java·前端·javascript
赤壁小虾3 小时前
【渲染流水线】[逐片元阶段]-[透明度测试]以UnityURP为例
java·前端·数据库
青山木4 小时前
Hot 100 --- 搜索插入位置
java·数据结构·算法·leetcode
Jul1en_4 小时前
【Claude Code Compact】源码级别的学习上下文压缩
java·前端·学习·github·ai编程
摇滚侠4 小时前
《SpringBoot 3:入门与应用实战》第 15 章 生产级特性 管理 Spring Boot 应用 阅读笔记
java·spring boot·笔记
XWalnut4 小时前
SpringBoot快速入门
java·spring boot·后端
前端 贾公子5 小时前
第06章:结构化输出 (上)
java·服务器·前端
念何架构之路5 小时前
restartmanager-重启管理子系统
java·开发语言