jsqlparser

依赖maven

        <!-- https://mvnrepository.com/artifact/com.github.jsqlparser/jsqlparser --><dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlparser</artifactId><version>4.3</version></dependency>
    public static void main(String[] args) throws Exception {String sql = """UPDATEt1 qSET q.name  = '张三'""";
//        sql = """
//DELETE t1 FROM t1,t2 WHERE t1.id=t2.id
//               """;Statement parse = CCJSqlParserUtil.parse(sql);//字典Dict tableMap = new Dict();Dict tableFullMap = new Dict();Table table = null;FromItem fromItem = null;List<Join> joins = null;List<Table> usingList = null;Expression where = null;if(parse instanceof Insert){log.info("增");Insert insert = (Insert) parse;table = insert.getTable();}else if(parse instanceof Delete){log.info("删");Delete delete = (Delete) parse;table = delete.getTable();joins = delete.getJoins();usingList = delete.getUsingList();where = delete.getWhere();}else if(parse instanceof Update){log.info("改");Update update = (Update) parse;table = update.getTable();joins = update.getJoins();fromItem = update.getFromItem();where = update.getWhere();}else if(parse instanceof Select){log.info("查");}if(table != null){log.info("表名:{}", table.getName());if(table.getAlias() != null){tableMap.set(table.getAlias().getName(), table.getName());}else{tableMap.set(table.getName(), table.getName());}tableFullMap.set(table.getName(), table);}if(fromItem != null){Table fromItemTable = (Table) fromItem; // table.getAlias().getName(), table.getName()log.info("fromItem表名:{}", fromItemTable.getName());if(fromItemTable.getAlias() != null){tableMap.set(fromItemTable.getAlias().getName(), fromItemTable.getName());}else{tableMap.set(fromItemTable.getName(), fromItemTable.getName());}tableFullMap.set(fromItemTable.getName(), fromItemTable);}/*** 联查*/if(CollUtil.isNotEmpty(joins)){for (Join join : joins) {FromItem rightItem = join.getRightItem();Table table2 = (Table) rightItem; // (table.getAlias().getName(), table.getName());log.info("联查表:{}", table2.getName());if(table2.getAlias() != null){tableMap.set(table2.getAlias().getName(), table2.getName());}else{tableMap.set(table2.getName(), table2.getName());}tableFullMap.set(table2.getName(), table2);// on 条件分析   //和where一样Collection<Expression> onExpressions = join.getOnExpressions();for (Expression expression : onExpressions) {
//                EqualsTo equalsTo = (EqualsTo) expression;if (expression instanceof Column) {Column rightColumn = (Column) expression;log.info("联查条件 ON,表名:{}, 字段名:{}, 关联条件:{}", tableMap.get(rightColumn.getTable().toString()), rightColumn.getColumnName());}}}}// where 分析// where 只有两种情况,一种就是简单的a = b,另外就是 a = b or ... and, 这种就是AndExpressionif(where != null){if (where instanceof EqualsTo) {EqualsTo equalsTo = (EqualsTo) where;Expression rightExpression = equalsTo.getRightExpression();Expression leftExpression = equalsTo.getLeftExpression();if (rightExpression instanceof Column) {Column rightColumn = (Column) rightExpression;log.info("条件 RIGHT,表名:{}, 字段名:{}, 值:{}", tableMap.get(rightColumn.getTable().toString()), rightColumn.getColumnName(), equalsTo.getRightExpression());}if (leftExpression instanceof Column) {Column leftColumn = (Column) leftExpression;log.info("条件 LEFT,表名:{}, 字段名:{}, 值:{}", tableMap.get(leftColumn.getTable().toString()), leftColumn.getColumnName(), equalsTo.getRightExpression());}}else if(where instanceof AndExpression){AndExpression andExpression = (AndExpression) where;Expression leftExpression = andExpression.getLeftExpression();
//            doExpression(leftExpression);Expression rightExpression = andExpression.getRightExpression();
//            doExpression(rightExpression);}}/*** usingList*/if(CollUtil.isNotEmpty(usingList)){for (Table table2 : usingList) {if(table2.getAlias() != null){tableMap.set(table2.getAlias().getName(), table2.getName());}else{tableMap.set(table2.getName(), table2.getName());}log.info("using表名:{}", table2.getName());}}//        System.out.println(parse);
//
//        // 使用工具类把SQL转换为Select对象
//        Select select = (Select) CCJSqlParserUtil.parse("""
//                 SELECT
//                                       *
//                                        FROM
//                                        user u
//                """);
//
//        SelectBody selectBody = select.getSelectBody();
//        PlainSelect plainSelect = (PlainSelect) selectBody;}

工具

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Dict;
import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.delete.Delete;
import net.sf.jsqlparser.statement.insert.Insert;
import net.sf.jsqlparser.statement.select.FromItem;
import net.sf.jsqlparser.statement.select.Join;
import net.sf.jsqlparser.statement.select.Select;
import net.sf.jsqlparser.statement.update.Update;import java.util.HashSet;
import java.util.List;
import java.util.Set;@Slf4j
public class SqlUtil {/*** 通过sql 解析出涉及到的表* @param sql* @return* @throws Exception*/public static Set<String> getSqlTables(String sql) {//        String sql = """
//                UPDATE
//                 user u
//                 SET u.name  = '张三'
//                """;
//        sql = """
//DELETE t1 FROM t1,t2 WHERE t1.id=t2.id
//               """;Set<String> tables = new HashSet<>();Statement parse = null;try {parse = CCJSqlParserUtil.parse(sql);} catch (JSQLParserException e) {e.printStackTrace();return tables;}//字典Dict tableMap = new Dict();Dict tableFullMap = new Dict();Table table = null;FromItem fromItem = null;List<Join> joins = null;List<Table> usingList = null;Expression where = null;if(parse instanceof Insert){log.info("增");Insert insert = (Insert) parse;table = insert.getTable();}else if(parse instanceof Delete){log.info("删");Delete delete = (Delete) parse;table = delete.getTable();joins = delete.getJoins();usingList = delete.getUsingList();where = delete.getWhere();}else if(parse instanceof Update){log.info("改");Update update = (Update) parse;table = update.getTable();joins = update.getJoins();fromItem = update.getFromItem();where = update.getWhere();}else if(parse instanceof Select){
//            log.info("查");}if(table != null){
//            log.info("表名:{}", table.getName());
//            if(table.getAlias() != null){
//                tableMap.set(table.getAlias().getName(), table.getName());
//            }else{
//                tableMap.set(table.getName(), table.getName());
//            }
//            tableFullMap.set(table.getName(), table);tables.add(table.getName());}if(fromItem != null){Table fromItemTable = (Table) fromItem; // table.getAlias().getName(), table.getName()
//            log.info("fromItem表名:{}", fromItemTable.getName());
//            if(fromItemTable.getAlias() != null){
//                tableMap.set(fromItemTable.getAlias().getName(), fromItemTable.getName());
//            }else{
//                tableMap.set(fromItemTable.getName(), fromItemTable.getName());
//            }
//            tableFullMap.set(fromItemTable.getName(), fromItemTable);tables.add(fromItemTable.getName());}/*** 联查*/if(CollUtil.isNotEmpty(joins)){for (Join join : joins) {FromItem rightItem = join.getRightItem();Table table2 = (Table) rightItem; // (table.getAlias().getName(), table.getName());
//                log.info("联查表:{}", table2.getName());
//                if(table2.getAlias() != null){
//                    tableMap.set(table2.getAlias().getName(), table2.getName());
//                }else{
//                    tableMap.set(table2.getName(), table2.getName());
//                }
//                tableFullMap.set(table2.getName(), table2);tables.add(table2.getName());// on 条件分析   //和where一样
//                Collection<Expression> onExpressions = join.getOnExpressions();
//                for (Expression expression : onExpressions) {EqualsTo equalsTo = (EqualsTo) expression;
//                    if (expression instanceof Column) {
//                        Column rightColumn = (Column) expression;
//                        log.info("联查条件 ON,表名:{}, 字段名:{}, 关联条件:{}", tableMap.get(rightColumn.getTable().toString()), rightColumn.getColumnName());
//                    }
//                }}}// where 分析// where 只有两种情况,一种就是简单的a = b,另外就是 a = b or ... and, 这种就是AndExpression
//        if(where != null){
//            if (where instanceof EqualsTo) {
//                EqualsTo equalsTo = (EqualsTo) where;
//                Expression rightExpression = equalsTo.getRightExpression();
//                Expression leftExpression = equalsTo.getLeftExpression();
//                if (rightExpression instanceof Column) {
//                    Column rightColumn = (Column) rightExpression;
//                    log.info("条件 RIGHT,表名:{}, 字段名:{}, 值:{}", tableMap.get(rightColumn.getTable().toString()), rightColumn.getColumnName(), equalsTo.getRightExpression());
//                }
//                if (leftExpression instanceof Column) {
//                    Column leftColumn = (Column) leftExpression;
//                    log.info("条件 LEFT,表名:{}, 字段名:{}, 值:{}", tableMap.get(leftColumn.getTable().toString()), leftColumn.getColumnName(), equalsTo.getRightExpression());
//                }
//            }else if(where instanceof AndExpression){
//                AndExpression andExpression = (AndExpression) where;
//                Expression leftExpression = andExpression.getLeftExpression();doExpression(leftExpression);
//                Expression rightExpression = andExpression.getRightExpression();doExpression(rightExpression);
//            }
//        }/*** usingList*/if(CollUtil.isNotEmpty(usingList)){for (Table table2 : usingList) {//                if(table2.getAlias() != null){
//                    tableMap.set(table2.getAlias().getName(), table2.getName());
//                }else{
//                    tableMap.set(table2.getName(), table2.getName());
//                }
//                log.info("using表名:{}", table2.getName());tables.add(table2.getName());}}//        System.out.println(parse);
//
//        // 使用工具类把SQL转换为Select对象
//        Select select = (Select) CCJSqlParserUtil.parse("""
//                 SELECT
//                                       *
//                                        FROM
//                                        user u
//                """);
//
//        SelectBody selectBody = select.getSelectBody();
//        PlainSelect plainSelect = (PlainSelect) selectBody;return tables;}}

【组件】JAVA解析SQL语句jsqlparser相关推荐

  1. java解析sql语句简书,Mybatis原理解析(一)--java.sql数据库操作的基本实现方式

    在研究Mybatis原理之前,先看一下java中是如何实现一次对数据库的访问的: public void testSql() { Connection connection = null; State ...

  2. Java中如何解析SQL语句、格式化SQL语句、生成SQL语句?

    昨天在群里看到有小伙伴问,Java里如何解析SQL语句然后格式化SQL,是否有现成类库可以使用? 之前TJ没有做过这类需求,所以去研究了一下,并找到了一个不过的解决方案,今天推荐给大家,如果您正要做类 ...

  3. Java使用Druid解析SQL语句

    依赖 名称:com.alibaba.druid 版本:1.1.16 SQL语句解析 以SQLServer为例,解析插入语句和更新语句,并提取对应的数据 /*** @Author li.dongquan ...

  4. mysql解释器_atitit.java解析sql语言解析器解释器的实现

    atitit.java解析sql语言解析器解释器的实现 1. 解析sql的本质:实现一个4gl dsl编程语言的编译器 1 2. 解析sql的主要的流程,词法分析,而后进行语法分析,语义分析,构建sq ...

  5. Java解析SQL生成语法树_Atitit.sql ast 表达式 语法树 语法 解析原理与实现 java php c#.net js python...

    Atitit.sql ast 表达式 语法树 语法 解析原理与实现java php c#.net js python 1.1.Sql语法树ast如下图锁死 2.SQL语句解析的思路和过程 2.1.le ...

  6. JAVA中用 SQL语句操作小结

    1.添加记录(INSERT) 使用SQL语句的INSERT命令可以向数据库中插入记录,INSERT命令的基本形式为: INSERT INTO 表名 [(字段名1,字段名2-)] VALUES (值1, ...

  7. java拼接sql语句的in条件

    1.问题 java拼接sql语句的in条件,需要将列表或数组转换为(" "," ")的格式 2.代码 StringBuffer sbuffer= new Str ...

  8. java 查询sql语句_java执行SQL语句实现查询的通用方法详解

    完成sql查询 并将查询结果放入vector容器,以便其他程序使用 /* * 执行sql查询语句 */ public static vector executequery(class clazz, s ...

  9. java中sql语句_java中sql语句的编写规则

    java中sql语句的编写规则 发布时间:2020-06-26 15:11:11 来源:亿速云 阅读:143 作者:Leah 这期内容当中小编将会给大家带来有关java中sql语句的编写规则,文章内容 ...

最新文章

  1. 【深度学习入门到精通系列】Deep Q Network
  2. JavaScript强化教程 -- cocosjs场景切换
  3. c语言幼儿园管理系统,【资源学习】c语言程序代码,登录幼儿园200个小朋友的数据...
  4. NET问答: C# 中有哪些 HttpPost 工具包
  5. R载入需要的程辑包:rJava Error
  6. AndroidLinker与SO加壳技术之下篇 1
  7. 模板引擎工作原理_「白皮书解读搜索引擎的工作原理」如何排序
  8. Centos添加supervisor为服务,启动/关闭,设置开机启动服务
  9. 西瓜书+实战+吴恩达机器学习(四)监督学习之线性回归 Linear Regression
  10. C语言通过数组指针获取长度
  11. php输出因子,如何在PHP因子程序中返回值
  12. win7,8走网络打印机出现删除设备和打印机门未关闭的解决方法
  13. 終級方案之封USB設備必殺技
  14. PHP:错误控制运算符
  15. 如何根据vin码查询_VIN车辆识别代码查询
  16. PS滤镜-Topaz Photoshop Plugins Bundle
  17. matlab 数据正态性检验
  18. HW红队攻防基础建设—C2 IP隐匿技术
  19. Arduino与Proteus仿真实例-ULN2003驱动直流电机仿真
  20. [读书笔记]捉虫日记[A Bug Hunter's Diary]

热门文章

  1. Python数据分析《爱情公寓5》中的蜕变和成长
  2. 陕西师范大学计算机学院课表,陕西师范大学数学与信息科学学院课程表一.DOC...
  3. Mac os 查看PDM文件
  4. 什么是接口Mock测试?
  5. Linux下QT程序的发布及相关问题
  6. 每天学点英语语法-重头开始6
  7. Vundle的介绍及安装
  8. win10关闭快速启动_win10系统关闭快速启动功能教程
  9. 华为交换机端口配置删除_华为交换机基本配置命令
  10. SAP中采购审批过程PR/PO测试过程及结果记录