JSQLParser碰到的问题

article/2025/10/5 4:50:22

JSQLParser是github上一个开源的项目,专门解析SQL,可以轻松地得到一条SQL的列、表、条件等对象,

906d88d3ae6682af9434ceb4c1db9761.png

P.S. https://github.com/JSQLParser/JSqlParser

最近在做一个功能开发的时候,被他困扰了下,从需求来讲,就是利用正则,先将多行的SQL改成一行,然后通过JSQLParser解析SQL,但是在这过程中,碰到了很多问题。

问题1,提示EOF

最崩溃的,就是这个错误,

Encountered unexpected token: EOF

EOF我们在C中经常看到的,表示文件结尾,End Of File,但在这提示,一开始确实迷惑,忽略中间各种盲测调试,其实问题就出在所有的SQL合并到单行,如果存在"--"这种语法就会导致"--"跟着的所有内容,都是注释,如果之前的内容恰巧不能构成一条正确的SQL,就会提示未找到正确的结尾。

场景1,字段中出现"--内容",

select c1, --测试字段c2, c3from test1join test2where test1.id = test2.id;

场景2,字段中出现"--无内容",

select c1, --c2, c3from test1join test2where test1.id = test2.id;

场景3,WHERE条件中出现"--内容",

select c1, --测试字段c2, c3from test1join test2where test1.id = test2.id --连接and test1.id = 1;

以上三个场景,如果要将SQL整合成为一行,就需要替换这些"--",

replaceAll("--.+[^.+]", " ")
.replaceAll("--[^.+]", " ")
.replaceAll("[\r\n]", " ");

问题2,提示"\\"

Encountered: "\\" after : ""

通过SQL,

select c1, --测试字段c2,REPLACE(REPLACE(to_char(SUBSTR(regexp_REPLACE(c3, '\s',''),1,25)),'\','\\'),'"','\"') AS c3from test1join test2where test1.id = test2.id;

定位到是REPLACE函数中用到的"\\",

regexp_REPLACE(TEST, '\s',''),1,25)),'\','\\')

因此再增加对"\\"的函数替换,将其改为统一的"XXX",

.replaceAll("\\\\", "XXX")

问题3,提示\uff01

Encountered: "\uff01" (65281), after : ""

\uff01这个其实是中文的叹号,

>>> print(u'\uff01')
!(中文叹号)

除了这种中文叹号的使用,还出现了中文的括号,"("和")",如下所示,

场景1 中文叹号,

select c1, --测试字段c2, c3from test1join test2where test1.id = test2.id and test1.output !(此处是中文叹号)= 1;

场景2,中文括号,

select c1, --测试字段c2, c3from test1join test2where test1.id = test2.id and test1.output in ((此处是中文括号)1, 2, 3)(此处是中文括号);

我们知道,SQL中使用中文符号,执行报错,如下所示,

SQL> select * from test where owner !='a';
select * from test where owner !='a'*
ERROR at line 1:
ORA-00911: invalid character

但是既然出现了,程序上就得规避,hard code对这些字符,进行替换,

.replaceAll("!", "!")      // 替换中文的!
.replaceAll("(", "(")      // 替换中文的(
.replaceAll(")", ")");     // 替换中文的)

从这个处理过程我们能看到,SQL的标准写法上,其实还是有很多值得遵循的,所谓无规矩,不成方圆,还是有他的道理。

近期更新的文章:

《高刷屏是什么?

《"万一免五"是什么?

《最近碰到的问题

《Python一个有趣的彩蛋

《国内首个违反GPL的案件介绍

文章分类和索引:

《公众号800篇文章分类和索引


http://chatgpt.dhexx.cn/article/UUaBVhrK.shtml

相关文章

JSqlParser-SQL解析处理

一、介绍 JSqlParse是一款很精简的sql解析工具&#xff0c;将sql语句转成Java对象。 官网&#xff1a;JSqlParser - Home 用法&#xff1a;可以用于数据权限处理&#xff0c;拦截sql解析改写sql等等。 二、版本 <dependency><groupId>com.github.jsqlparser&l…

JSQLParser 解析复杂SQL 2.0

前言 这段时间&#xff0c;为了开发数据中台项目&#xff0c;我去研究学习了JSQLParser&#xff08;Java中解析SQL语句的工具&#xff09;&#xff0c;并且结合网上资料&#xff0c;写了一个初步的SQL解析工具类... 正文 时隔三天&#xff0c;我又回来了&#xff0c; 因为之前J…

JSqlParser入门系列(1)-JSqlParser简介及入门案例

简介 JSqlParser是一个SQL语句解析器。它将SQL转换为Java类的可遍历层次结构。 支持Oracle&#xff0c;SqlServer&#xff0c;MySQL&#xff0c;PostgreSQL等常用数据库。但各种数据库系统的SQL语法都在动态变化&#xff0c;可以解析某些&#xff08;不是全部&#xff09;。 …

JSqlParser

JSqlParser 关于SqlParser引言&#xff1a; Java 生态中较为流行的 SQL Parser 有以下几种&#xff1a; fdb-sql-parser 是 FoundationDB 在被 Apple 收购前开源的 SQL Parser&#xff08;不支持很复杂的SQL&#xff09;&#xff0c;目前已无人维护。jsqlparser 是基于 Java…

Sql解析转换之JSqlParse完整介绍

1、 jsqlparse介绍 JSqlParse是一款很精简的sql解析工具&#xff0c;它可以将常用的sql文本解析成具有层级结构的“语法树”&#xff0c;我们可以针对解析后的“树节点&#xff08;也即官网里说的有层次结构的java类&#xff09;”进行处理进而生成符合我们要求的sql形式。 官…

相机内参模型Kannala-Brandt/fisheye/pinhole+equi详解

文章目录 1. 论文总述2. pinholeradtan无法建模鱼眼相机3. 内参模型3.1 Radially Symmetric Model3.2 Full Model3.3 affine transformation3.4 Backward Model 4. 标定4.1 ORIFL190-3 lens 可以被标定 5. 内参结果验证参考文献 本博客主要从fisheye论文角度&#xff0c;详细介…

python-opencv实现pinhole相机图像转fisheye相机图像

根据鱼眼相机公式rff*θ&#xff0c;其中θatan(rc/f)&#xff0c;即可实现从pinhole相机模型到fisheye相机模型的像素映射。可自行设置焦距&#xff0c;我使用如下代码完成了将cityscape数据集转换为鱼眼视角。 import numpy as np import cv2 import osclass ConvertFisheye…

jiraconfluencefisheye用户同步

分别安装好jira和confluence&#xff0c;fisheye之后&#xff0c;先在jira中将confluence和fisheye的应用程序连接配置好。如下 配置好后&#xff0c;在jira中的用户服务器中可以已经允许对应的程序使用jira的用户了。 此时&#xff0c;分别去confluence或者fisheye的user-d…

Atlassian家族 JIRA Confluence Fisheye 在 Linux (CentOS 7.6 )安装部署教程

安装包 atlassian-agent-v1.2.2.tar.gz # 破解工具atlassian-fisheye-4.8.3.zipatlassian-confluence-7.4.1-lts-x64.binatlassian-jira-software-8.5.5-lts-x64.bin 部署环境 Linux版本&#xff1a;CentOS 7.6VMware 16Confluence 6.3.1Jira 8.5.5MySQL 5.6JDK 1.8…

【图像】【OpenCV鱼眼矫正】二、fisheye::initUndistortRectifyMap()源码分析

目录 一、fisheye::initUndistortRectifyMap() 之 功能介绍二、fisheye::initUndistortRectifyMap() 之 源码分析1. 源码分析2. 更进一步3. 如何由 (j, i) 算出 (u, v) &#xff1f; 一、fisheye::initUndistortRectifyMap() 之 功能介绍 在上一篇文章的第 2. 部分中&#xff…

Monocular Fisheye Camera Depth Estimation Using Sparse LiDAR Supervision

Paper name Monocular Fisheye Camera Depth Estimation Using Sparse LiDAR Supervision Paper Reading Note URL: https://arxiv.org/pdf/1803.06192.pdf TL;DR 2018 年 ITSC 文章&#xff0c;出自于德国 Valeo 自动驾驶公司&#xff0c;提出了单目鱼眼深度估计的有监督…

Linux环境fisheye+crucible安装与破解

由于最新的版本中fisheye和crucible已经集成在一起了&#xff0c;故只需要下载一个包就可以了。 需要的软件及版本情况如下&#xff1a; fisheye4.8.7&#xff1b;&#xff08;安装包&#xff09; atlassian-agent-v1.2.3&#xff1b;&#xff08;破解工具&#xff09; mysql-c…

相机模型-鱼眼模型(fisheye camera model)

鱼眼相机模型 &#xff08;fisheye camera model&#xff09; 模型介绍等距投影等立体角投影正交投影体视投影线性投影 Kannala-Brandt 模型去畸变过程投影过程反投影过程 雅可比计算 之前总结了一下针孔相机的模型&#xff0c;然后得到了比较积极的回复&#xff08;其实是我到…

opencv fisheye calibration(鱼眼相机校正)

文章目录 fisheye_calibration小孔成像模型&#xff08;理想相机成像模型&#xff09;fisheye model 相机模型内参校正的原理calibration过程对这个过程简单分析参考文章 fisheye_calibration 小孔成像模型&#xff08;理想相机成像模型&#xff09; 请参考下面的文章 理想相…

【论文】RAPiD: Rotation-Aware People Detection in Overhead Fisheye Images

RAPiD: Rotation-Aware People Detection in Overhead Fisheye Images 在这项工作中&#xff0c;我们开发了一种端到端的旋转感知的人检测方法&#xff0c;称为RAPID&#xff0c;它使用任意方向的包围盒来检测人。我们的完全卷积神经网络使用周期损失函数直接回归每个包围盒的…

fisheye calib视野调整

1. 畸变模型采用 K np.array([[6.2597563231075685e02, 0., 1.1601088601848592e03],[0., 6.2525998102575511e02, 1.1634786618991664e03],[0., 0., 1.]]) 2. 直接使用 initUndistortRectifyMap和remap时注意调节视野的大小&#xff0c;为了方便得到想要的大小需要借助 es…

初识FishEye

一、简介 这几个月一直都在整白盒测试&#xff0c;虽然断断续续&#xff0c;但是也确实学习了不少东西&#xff0c;长了不少见识。今天就要给大家隆重介绍一款非常棒的工具——FishEye&#xff01; FishEye能够为你打开代码库&#xff0c;并帮助你分析代码&#xff0c;一句话概…

FishEye简介

前言 在项目开发过程中&#xff0c;随着开发的进行&#xff0c;将有大量的代码编写提交到代码仓库&#xff0c;如何能全面准确的了解源代码的变化&#xff0c;提交的频率&#xff0c;代码量的趋势&#xff0c;发现代码的缺陷&#xff0c;将是控制源代码质量的重要指标&#xff…

linux服务器开机提示f1,Dell的Linux服务器开机按F1解决方法

最近买了些二手服务器&#xff0c;dell品牌&#xff0c;性价比还不错&#xff0c;但是一台dell 服务器开机总是提示按F1才能进系统,到底应该怎么解决呢&#xff1f; 请问我的电脑开机老是提示“strike the f1 key to continue &#xff0c;f2 to run the setup utility”这些&a…