当前位置: 首页 > 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

相关文章:

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 statementCCJSq…...

基于spring boot的高校专业实习管理系统的设计与实现

文末获取源码和万字论文&#xff0c;制作不易&#xff0c;感谢点赞支持。 设计题目&#xff1a;基于spring boot的高校专业实习管理系统的设计与实现 摘 要 随着国内市场经济这几十年来的蓬勃发展&#xff0c;突然遇到了从国外传入国内的互联网技术&#xff0c;互联网产业从开…...

OpenCV相机标定与3D重建(11)机器人世界手眼标定函数calibrateRobotWorldHandEye()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算机器人世界/手眼标定&#xff1a; w T b _{}^{w}\textrm{T}_b w​Tb​ 和 c T g _{}^{c}\textrm{T}_g c​Tg​。 cv::calibrateRobotWorldHa…...

计算机网络ENSP课设--三层架构企业网络

本课程设计搭建一个小型互联网&#xff0c;并模拟Internet的典型Web服务过程。通过此次课程设计&#xff0c;可以进一步理解Internet的工作原理和协议过程&#xff0c;并提高综合知识的运用能力和分析能力。具体目标包括&#xff1a; &#xff08;1&#xff09;掌握网络拓扑的…...

【openwrt】openwrt-21.02 基于IP地址使用ipset实现策略路由操作说明

openwrt版本信息 DISTRIB_ID=OpenWrt DISTRIB_RELEASE=21.02-SNAPSHOT DISTRIB_REVISION=r0-6bf6af1d5 DISTRIB_TARGET=mediatek/mt7981 DISTRIB_ARCH=aarch64_cortex-a53 DISTRIB_DESCRIPTION=OpenWrt 21.02-SNAPSHOT r0-6bf6af1d5 DISTRIB_TAINTS=no-all busybox override …...

Git:常用命令

一、查看当前分支 git branch 二、查看所有分支 git branch -a 三、切换到远程分支 git checkout origin/分支名 示例&#xff1a;git checkout origin/dev 四、拉取远程分支代码 git pull origin 分支名 示例&#xff1a;git pull origin dev 五、常用指令 查看暂存区…...

【2025最新版】搭建个人博客教程

【2025最新版】搭建个人博客教程 –小记&#xff1a; 在搭建我的这个博客之前我在CSDN也发布过一些文章&#xff0c;目前应该也是几千粉丝了&#xff0c;但是看到别人都是用自己博客写的就感觉自己很LOW&#xff0c;所以就想自己来搭建一个属于自己的个人博客。当然搭建博客的…...

微信小程序实现联动删除输入验证码框

以下是json代码 {"component": true,"usingComponents": {} }以下是wxml代码 <van-popup show"{{ show }}" bind:close"onClose" custom-class"extract"><image src"../../images/extract/icon1.png"…...

数据库中decimal、float 和 double区别

在计算机科学中&#xff0c;decimal、float 和 double 是用于表示和处理数值的不同数据类型。 - decimal 是一种精确的十进制浮点数表示&#xff0c;通常用于需要高精度计算的场景&#xff0c;比如财务应用。它能够精确表示小数&#xff0c;并且不会出现浮点数运算误差。 - flo…...

网络编程01

1. 概念 通过网络&#xff0c;让两个主机之间能够进行通信&#xff0c;基于这样的通信完成一定的功能 只要满足进程不同即可&#xff0c;即使是同一个主机&#xff0c;只要是不同的进程&#xff0c;基于网络完成编程 进行网络编程时&#xff0c;需要操作系统提供一组API&…...

el-dialog修改其样式不生效加deep也没用

场景 el-dialog标签直接写在了template下。 解决方法 在template中先写一层div&#xff0c;包裹住el-dialog。...

三天精通一算法之快速排序

力扣链接912. 排序数组 - 力扣&#xff08;LeetCode&#xff09;注意这题快排不能用递归&#xff0c;否则堆会爆 快速排序&#xff08;Quicksort&#xff09;是一种高效的排序算法&#xff0c;通常使用分治法来将一个列表分成较小的子列表&#xff0c;然后递归地排序这些子列表…...

互联网、物联网的相关标准

互联网的相关标准 网络通信协议&#xff1a; HTTP&#xff08;Hypertext Transfer Protocol&#xff09;&#xff1a;用于在网络中传输文本、图像、音频和视频等数据的协议。它基于请求-响应模型&#xff0c;客户端发送请求给服务器&#xff0c;服务器返回响应。HTTPS&a…...

Linux题库及答案

填空题 1. 建立用户账号的命令是__useradd________。 2. 修改账号密码的命令是__passwd________。 3. 更改用户密码过期信息的命令是__chage________。 4. 创建一个新组的命令是___groupadd_______。 5. 用于在不注销的情况下切换到系统中的另一个用户的命令是___su_…...

Android 镜像模式和扩展模式区别探讨-Android14

Android 镜像模式和扩展模式区别探讨 1、区分镜像模式和扩展模式1.1 扩展屏是否有显示内容1.2 镜像模式显示条件 2、镜像模式界面 同屏显示和异屏显示探讨DisplayManagerService启动及主屏添加-Android13 Android主副屏显示-Android14 1、区分镜像模式和扩展模式 LogicalDispla…...

深度学习笔记之BERT(五)TinyBERT

深度学习笔记之TinyBERT 引言回顾&#xff1a;DistilBERT模型TinyBERT模型结构TinyBERT模型策略Transformer层蒸馏嵌入层蒸馏预测层蒸馏 TinyBERT模型的训练效果展示 引言 上一节介绍了 DistilBERT \text{DistilBERT} DistilBERT模型&#xff0c;本节将继续介绍优化性更强的知…...

【时间序列预测】基于PyTorch实现CNN_BiLSTM算法

文章目录 1. CNN与BiLSTM2. 完整代码实现3. 代码结构解读3.1 CNN Layer3.2 BiLSTM Layer3.3 Output Layer3.4 forward Layer 4. 应用场景5. 总结 本文将详细介绍如何使用Pytorch实现一个结合卷积神经网络&#xff08;CNN&#xff09;和双向长短期记忆网络&#xff08;BiLSTM&am…...

联想Y7000 2024版本笔记本 RTX4060安装ubuntu22.04双系统及深度学习环境配置

目录 1..制作启动盘 2.Windows 磁盘分区,删除原来ubuntu的启动项 3.四个设置 4.安装ubuntu 5.ubuntu系统配置 1..制作启动盘 先下载镜像文件,注意版本对应。Rufus - 轻松创建 USB 启动盘 用rufus制作时,需要注意选择正确的分区类型和系统类型。不然安装的系统会有问题…...

VuePress学习

1.介绍 VuePress 由两部分组成&#xff1a;第一部分是一个极简静态网站生成器 (opens new window)&#xff0c;它包含由 Vue 驱动的主题系统和插件 API&#xff0c;另一个部分是为书写技术文档而优化的默认主题&#xff0c;它的诞生初衷是为了支持 Vue 及其子项目的文档需求。…...

一次“okhttp访问间隔60秒,提示unexpected end of stream“的问题排查过程

一、现象 okhttp调用某个服务&#xff0c;如果第二次访问间隔上一次访问时间超过60s&#xff0c;返回错误&#xff1a;"unexpected end of stream"。 二、最终定位原因&#xff1a; 空闲连接如果超过60秒&#xff0c;服务端会主动关闭连接。此时客户端恰巧访问了这…...

把Camunda流程引擎当SaaS用?多租户与外部任务实战指南(基于RuoYi改造)

基于Camunda构建企业级流程中心的架构设计与实战 在数字化转型浪潮中&#xff0c;业务流程自动化已成为企业提升运营效率的核心手段。当一家企业同时运行CRM、OA、ERP等多个业务系统时&#xff0c;每个系统都需要工作流支持&#xff0c;但为每个系统单独部署和维护Camunda引擎显…...

OpenCore 辅助工具(OCAT):跨平台开源配置工具的零基础上手指南

OpenCore 辅助工具&#xff08;OCAT&#xff09;&#xff1a;跨平台开源配置工具的零基础上手指南 【免费下载链接】OCAuxiliaryTools Cross-platform GUI management tools for OpenCore&#xff08;OCAT&#xff09; 项目地址: https://gitcode.com/gh_mirrors/oc/OCAuxili…...

跨平台哔哩哔哩内容管理神器:BiliTools全方位使用指南

跨平台哔哩哔哩内容管理神器&#xff1a;BiliTools全方位使用指南 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持视频、音乐、番剧、课程下载……持续更新 项目地址: https://gitcode.com/GitHub_Trending/bilit/Bili…...

TAICHI-flet终极排障指南:从新手到高手的完整解决方案

TAICHI-flet终极排障指南&#xff1a;从新手到高手的完整解决方案 【免费下载链接】TAICHI-flet 基于flet的一款windows桌面应用&#xff0c;实现了浏览图片、音乐、小说、漫画、各种资源的功能。 项目地址: https://gitcode.com/GitHub_Trending/ta/TAICHI-flet TAICHI…...

多模态扩展实验:OpenClaw+Qwen3-32B处理图片描述生成

多模态扩展实验&#xff1a;OpenClawQwen3-32B处理图片描述生成 1. 实验背景与动机 最近在探索如何将OpenClaw的自动化能力扩展到视觉领域。作为一个长期依赖文本交互的框架&#xff0c;OpenClaw能否结合多模态大模型处理图像任务&#xff1f;这引发了我的兴趣。恰好手头有台…...

NaViL-9B效果实测:支持‘请将图中文字翻译为英文,并描述整体场景’

NaViL-9B效果实测&#xff1a;支持请将图中文字翻译为英文&#xff0c;并描述整体场景 1. 多模态能力惊艳亮相 NaViL-9B作为新一代原生多模态大语言模型&#xff0c;在图文理解方面展现出令人印象深刻的能力。不同于传统模型仅能处理单一模态&#xff0c;它能够同时理解图片内…...

【QT】Layout布局间隙优化全攻略(参数调整与实战技巧)

1. 为什么你的QT界面总有"迷之缝隙"&#xff1f; 每次用QT做界面开发时&#xff0c;最让我抓狂的就是那些莫名其妙出现的空白间隙。明明已经按照设计稿精确设置了控件尺寸&#xff0c;但运行起来总会出现几个像素的偏差。后来我发现&#xff0c;这些间隙主要来自三个…...

十大经典排序算法解析与实现

## 1. 十大经典排序算法技术解析### 1.1 算法分类体系 排序算法可分为两大技术类别&#xff1a;**比较类排序**&#xff1a; - 通过元素间比较确定相对次序 - 时间复杂度下限为O(nlogn) - 典型代表&#xff1a;快速排序、堆排序、归并排序**非比较类排序**&#xff1a; - 不依赖…...

SPIRAN ART SUMMONER跨平台适配:Windows/macOS/Linux下Streamlit祭坛兼容性

SPIRAN ART SUMMONER跨平台适配&#xff1a;Windows/macOS/Linux下Streamlit祭坛兼容性 1. 引言&#xff1a;当幻光祭坛遇见不同操作系统 想象一下&#xff0c;你刚刚在网络上看到了一个令人惊叹的AI图像生成工具——SPIRAN ART SUMMONER。它那充满《最终幻想10》风格的“幻光…...

SpringBoot实战:RestTemplate如何优雅地上传文件?附完整代码示例

SpringBoot实战&#xff1a;RestTemplate文件上传的深度优化与避坑指南 在微服务架构盛行的今天&#xff0c;SpringBoot应用间的文件传输已成为日常开发中的高频需求。许多开发者在使用RestTemplate进行文件上传时&#xff0c;往往会遇到各种"诡异"的问题——明明代码…...