如何用Java从SQL中提取出涉及到的表名、列名?

=Start=

缘由:

记录整理一下如何用Java从SQL中提取出涉及到的表名和列名。

正文:

参考解答:

最早我是想用Python实现这个功能的,因为在字符串处理方面Python相比于Java来说要方便太多,但是在网上找了一圈资料后发现,如果想单纯用Python自己手写实现,难度有点大,而且很难保证提取的效果。而Java在资源生态这方面的优势就比较大了,比如:

ANTLR4、Apache Calcite、Alibaba Druid

上面的这几个工具各有优缺点,在此不细说,后续会整理一些这方面的资料方便需要的人进行参考。这里主要把使用Alibaba Druid提取SQL表名、列名的方法实践整理并记录一下,方便自己查阅和参考。

Alibaba Druid其实是阿里开源的一个(有统计、监控功能的)数据库连接池实现,作为数据库连接池,它自身也有一个SQL解析模块,这里就是借助它提供的SQL解析模块实现我们需要的一些功能。

代码样例:

参考链接:

关于SQL解析,为何编程语言解析器ANTLR更胜一筹?
https://mp.weixin.qq.com/s/Di11ZzqiiY0tJYDRhfdCPw

Parsing mysql using ANTLR4 simple example
https://stackoverflow.com/questions/49769147/parsing-mysql-using-antlr4-simple-example

Dynamic Data Masking 动态数据脱敏
https://hhyo.github.io/2018/04/16/data-masking/

几种基于Java的SQL解析工具的比较与调用
https://www.cnblogs.com/blueglass/p/6286814.html
http://www.zhongruitech.com/168055984.html

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/4405.html

《如何用Java从SQL中提取出涉及到的表名、列名?》上有2条评论

  1. Alibaba Druid SQL Parser
    https://github.com/alibaba/druid/wiki/SQL-Parser

    和Antlr生成的SQL有很大不同的是,Druid SQL Parser性能非常好,可以用于生产环境直接对SQL进行分析处理。
    Druid的SQL Parser是手工编写,性能非常好,目标就是在生产环境运行时使用的SQL Parser,性能比antlr、javacc之类工具生成的Parser快10倍甚至100倍以上。

    Druid的sql parser是目前支持各种数据语法最完备的SQL Parser。

    Alibaba Druid SQL_Parser_Demo_visitor
    https://github.com/alibaba/druid/wiki/SQL_Parser_Demo_visitor

发表评论

电子邮件地址不会被公开。 必填项已用*标注