当前位置: 首页 > news >正文

java 使用JSqlParser和CCJSqlParser 解析sql

maven

<dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlparser</artifactId><version>4.9</version>
</dependency>

解析SQL

String sql = "select aa,bb from b";
Statement statement=CCJSqlParserUtil.parse(sql)Select selectStatement = (Select) statement;
PlainSelect plainSelect = selectStatement.getPlainSelect();
//plainSelect可以获取sql各个部分 如属性集合
List<SelectItem<?>> selectItems0 = plainSelect.getSelectItems();

分析
Statement 被设计成一个接口满足CURD各个处理方式
1、查询PlainSelect继承Select

        1.1//字段起别名  SELECT aa AS ALIAS1, bb AS ALIAS2 FROM bAddAliasesVisitor instance = new AddAliasesVisitor();instance.setPrefix("alias");selectStatement.accept(instance);1.2//加字段SELECT aa AS ALIAS1, bb AS ALIAS2, field FROM bSelectUtils.addExpression(selectStatement, new Column("field"));1.3//加字段表达式 SELECT aa AS ALIAS1, bb AS ALIAS2, field, 5 + 6 FROM bAddition add = new Addition();add.setLeftExpression(new LongValue(5));add.setRightExpression(new LongValue(6));SelectUtils.addExpression(selectStatement, add);1.4//加join  //SELECT aa AS ALIAS1, bb AS ALIAS2, field, 5 + 6 FROM b LEFT JOIN mytable2 ON a = bEqualsTo equalsTo = new EqualsTo();Statement select = (PlainSelect) test(sql);equalsTo.setLeftExpression(new Column("a"));equalsTo.setRightExpression(new Column("b"));Join addJoin = SelectUtils.addJoin(selectStatement, new Table("mytable2"), equalsTo);addJoin.setLeft(true);//SelectUtils构建一个SQL语句Select selectbuild = SelectUtils.buildSelectFromTableAndExpressions(new Table("mytable"), new Column("a"), new Column("b"));//SELECT a, b, c FROM mytableSelectUtils.addExpression(selectbuild, new Column("c"));//where 条件设置EqualsTo equalsTo1 = new EqualsTo();equalsTo1.setLeftExpression(new Column("id"));equalsTo1.setRightExpression(new Column("1"));PlainSelect plainSelect1 = selectbuild.getPlainSelect();plainSelect1.setWhere(equalsTo1);更多条件访问 https://blog.csdn.net/a250152/article/details/128610616

2、插入Insert
3、更新Update
4、删除Delete

http://www.lryc.cn/news/501442.html

相关文章:

  • 基于spring boot的高校专业实习管理系统的设计与实现
  • OpenCV相机标定与3D重建(11)机器人世界手眼标定函数calibrateRobotWorldHandEye()的使用
  • 计算机网络ENSP课设--三层架构企业网络
  • 【openwrt】openwrt-21.02 基于IP地址使用ipset实现策略路由操作说明
  • Git:常用命令
  • 【2025最新版】搭建个人博客教程
  • 微信小程序实现联动删除输入验证码框
  • 数据库中decimal、float 和 double区别
  • 网络编程01
  • el-dialog修改其样式不生效加deep也没用
  • 三天精通一算法之快速排序
  • 互联网、物联网的相关标准
  • Linux题库及答案
  • Android 镜像模式和扩展模式区别探讨-Android14
  • 深度学习笔记之BERT(五)TinyBERT
  • 【时间序列预测】基于PyTorch实现CNN_BiLSTM算法
  • 联想Y7000 2024版本笔记本 RTX4060安装ubuntu22.04双系统及深度学习环境配置
  • VuePress学习
  • 一次“okhttp访问间隔60秒,提示unexpected end of stream“的问题排查过程
  • SQL最佳实践:避免使用COUNT=0
  • PG与ORACLE的差距
  • 树莓派3B+驱动开发(2)- LED驱动(传统模式)
  • 超详细搭建PhpStorm+PhpStudy开发环境
  • 分析比对vuex和store模式
  • C# 网络编程--基础核心内容
  • 【C++游戏程序】easyX图形库还原游戏《贪吃蛇大作战》(三)
  • uni-app H5端使用注意事项 【跨端开发系列】
  • SpringBoot中的@Configuration注解
  • 十二、路由、生命周期函数
  • 【蓝桥杯每日一题】X 进制减法