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

标签: 开源推荐 开源 | 发表时间:2023-03-07 08:06 | 作者:
出处:https://blog.didispace.com/

昨天在群里看到有小伙伴问,Java里如何解析SQL语句然后格式化SQL,是否有现成​类库可以使用?

之前TJ没有做过这类需求,所以去研究了一下,并找到了一个不过的解决方案,今天推荐给大家,如果您正要做类似内容,那就拿来试试,如果暂时没需求,就先了解收藏(技多不压身)。

JSqlParser​

JSqlParser是一个用Java编写的SQL解析器,可以将SQL语句解析为Java对象,从而使开发人员能够轻松地分析、修改和重构SQL查询。

比如,这样的一句SQL语句 SELECT 1 FROM dual WHERE a = bSELECT 1 FROM dual WHERE a = b

JSqlParser可以将其解析为如下对象结构

SQL Text     
└─Statements: net.sf.jsqlparser.statement.select.Select
└─selectBody: net.sf.jsqlparser.statement.select.PlainSelect
├─selectItems -> Collection<SelectExpressionItem>
│ └─selectItems: net.sf.jsqlparser.statement.select.SelectExpressionItem
│ └─LongValue: 1
├─Table: dual
└─where: net.sf.jsqlparser.expression.operators.relational.EqualsTo
├─Column: a
└─Column: b

然后我们就可以通过其提供的API来访问这句SQL语句中的各个要素:

Statement statement = CCJSqlParserUtil.parse(sqlStr);     
if (statement instanceof Select) {
Select select = (Select) statement;
PlainSelect plainSelect = (PlainSelect) select.getSelectBody();

SelectExpressionItem selectExpressionItem =
(SelectExpressionItem) plainSelect.getSelectItems().get(0);

Table table = (Table) plainSelect.getFromItem();

EqualsTo equalsTo = (EqualsTo) plainSelect.getWhere();
Column a = (Column) equalsTo.getLeftExpression();
Column b = (Column) equalsTo.getRightExpression();
}

目前,JSqlParser支持了大部分主要的关系型数据库,包括:

  • Oracle
  • MS SQL Server and Sybase
  • PostgreSQL
  • MySQL and MariaDB
  • DB2
  • H2 and HSQLDB and Derby
  • SQLite

它支持大多数常见的SQL语法,包括SELECT、INSERT、UPDATE、DELETE等。除了解析SQL语句外,JSqlParser还提供了一些有用的功能,例如格式化SQL语句、生成SQL查询等。此外,JSqlParser还可以与其他Java库和框架集成,例如Hibernate、Spring等。

​项目地址: https://github.com/JSQLParser/JSqlParser

欢迎扫描下方二维码,关注公众号:TJ君,订阅每日推荐,获取更多好用效率工具!

相关 [java 解析 sql] 推荐:

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

- - 程序猿DD
昨天在群里看到有小伙伴问,Java里如何解析SQL语句然后格式化SQL,是否有现成​类库可以使用. 之前TJ没有做过这类需求,所以去研究了一下,并找到了一个不过的解决方案,今天推荐给大家,如果您正要做类似内容,那就拿来试试,如果暂时没需求,就先了解收藏(技多不压身). JSqlParser是一个用Java编写的SQL解析器,可以将SQL语句解析为Java对象,从而使开发人员能够轻松地分析、修改和重构SQL查询.

Java:解析sql语句的一个开源项目

- - 脚本爱好者
有时候一些数据不支持sql语句,那么我们为了使其应用更加方便,sql语句可以在接口中包装一下,自己写parser太复杂,工作量不小,这里有一个开源的项目可以帮助我们做这个事情. With this example class you can easily get the list of tables in a select statement (including subqueries and joins and, as soon as the union code will be ready, unions).

sql 解析器

- - zzm
// parser得到AST. // 将AST通过visitor输出. 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

SQL语法解析器JSQLParser

- - 非技术 - ITeye博客
SQL 语法解释器jsqlparser. 是用java 开发的解析器, 可以生成java类层次结构.. 可以完美解析 表的 增删查改等操作.. 展开它的源码你会发现.基本不用看api就可以使用,因为它是如此的类似sql. 只要你会java 只要你会写sql 那么你就会使用 jsqlparser ..

java解析APK

- - Linux - 操作系统 - ITeye博客
1、结合安卓提供apktool工具,用java执行cmd解析命令获取apk信息. 2、利用相关jar包里的集成方法解析apk. 这里只给出第二种方法,因为第一种方法在linux服务器下会出现不在控制范围之内的结果. // 将解压文件对象转列举对象. // 获得名为AndroidManifest.xml的文件.

Java 程序员容易犯的10个SQL错误

- - ITeye博客
Java程序员编程时需要混合面向对象思维和一般命令式编程的方法,能否完美的将两者结合起来完全得依靠编程人员的水准:. 技能(任何人都能容易学会命令式编程). 模式(有些人用“模式-模式”,举个例子,模式可以应用到任何地方,而且都可以归为某一类模式). 心境(首先,要写个好的面向对象程序是比命令式程序难的多,你得花费一些功夫).

Java开发者写SQL时常犯的10个错误

- - ImportNew
我十分惊讶的发现,我最近的一篇文章——《 Java开发者写SQL时常犯的10个错误》——最近在 我的博客和 我的合作伙伴DZone上非常的受欢迎. (这篇博客)的流行程度说明了几件事:. SQL在专业的Java开发中多么重要. 基本的SQL知识被忘掉(的情况)普遍存在. 通过 embracing SQL,你就能了解像.

Java VCF 格式解析

- - ITeye博客
  Java VCF 格式解析. vcf可以用记事本打开,格式如下:. String name = "张三";. //将字符串转换成utf-8 quoted-printable 格式. //将字符串utf-8 quoted-printable 格式 转换成正常格式. //将图片转换成base64格式字符.

java解析xml数据---sax解析器

- - ITeye博客
下面是handler解析数据的方法. private HashMap map = null;// 存储单个解析的完整对象. private List> list = null;// 存储全部的解析对象. private String currentTag = null; // 正在解析的元素的标签.

SQL 数据类型和 Java 数据类型间的映射关系

- - ITeye博客
由于 SQL 数据类型和 Java 数据类型是不同的,因此需要某种机制在使用 Java 类型的应用程序和使用 SQL 类型的数据库之间来读写数据. 为此,JDBC 提供了 getXXX 和 setXXX 方法集、方法 registerOutParameter 和类 Types. 本章汇集了影响各种类和接口的数据类型的有关信息,并列出所有的对应关系表(这些表显示了 SQL 类型和 Java 类型之间的映射关系)以便于参考.