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/ 子查询
相关推荐
JavacKaka3 小时前
LiteFlow规则引擎实战博客-2026-09-09
java
学渣超3 小时前
记一次复杂业务功能重构——从过程式长链路,到模板方法构建体系
java·架构·代码规范
Bs_MoneyMagnet3 小时前
基于springboot+vue的旅游景区点评系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·旅游
风跟我说过她3 小时前
SQL 一键转经典 Chen 风格 ER 图:开源 CLI + 在线工具 + Agent Skill
数据库·python·sql·开源·开源软件
ID34610744204 小时前
【课程设计】基于Spring Boot+Vue的校园共享无人机服务系统设计与实现-计算机毕设 附源码44219
javascript·vue.js·spring boot·python·node.js·php·课程设计
夜不会漫长4 小时前
C++:类和对象(2)
java·javascript·c++
IT毕设实战小研4 小时前
基于大数据的国内主要农作物产量趋势分析与可视化
android·java·大数据·django·课程设计
星辞秋4 小时前
Java 入门实战:从零搭建环境到写出第一个可用的命令行工具
java
ch.ju4 小时前
Java—idea知识:如何创建新项目
java·开发语言·intellij-idea
土司大王4 小时前
LeetCode hot100——74.搜索二维矩阵:Java 二分模板
java·算法·leetcode