java sql解析器比较druid sql parser vs jsqlparser vs fdb-sql-parser

先上结论。

  功能上:druid sql parser(支持分区、WITH、DUAL等。使用mysql语法解析时,已知oracle的一些操作符会被转为mysql,如|| 转为OR。使用oracle解析器时,union all里面的括号会被移到外面,从而导致可能执行出错) > jsqlparser(不支持分区) > fdb-sql-parser(不支持很复杂的SQL)。因此,首先排除fdb-sql-parser。都不支持不执行SQL语句解析语义,调用preparestatement即可,不是问题。

  易用性:jsqlparser > druid sql parser(文档和javadoc是在TMD懒了)。就druid sql parser和jsqlparser而言,核心只要理解访问者模式,其中核心又为com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor#visit及其父类,使用例子可以参见https://www.jianshu.com/p/3fb67691d3c8。

  所以,如果需要广泛使用,应选择druid sql parser而不是jsqlparser。

注:除了自己写过滤器外,druid也支持sql注入过滤器,可参考:https://my.oschina.net/yysue/blog/1618558,https://www.oschina.net/question/928524_106630

druid sql parser的官方文档:https://github.com/alibaba/druid/wiki/SQL-Parser。后续补充实战手册,我们在分布式查询引擎的重写、分库分表合并、用户名映射、基于sql自动生成智能的查询页面都是基于druid扩展实现的(一开始用jsqlparser,但是太弱了,后面大部分用druid重写了)。

jsqlparser官方文档:http://jsqlparser.sourceforge.net/example.php

原文地址:https://www.cnblogs.com/zhjh256/p/12001547.html

时间: 2024-11-07 23:45:13

java sql解析器比较druid sql parser vs jsqlparser vs fdb-sql-parser的相关文章

jsoup: Java HTML 解析器

jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容. 请参考:jsoup.org 例如: beanshell 抓取CSDN极客头条内容  soup.bsh // package org.jsoup.examples; import org.jsoup.Jsoup; import org.jsoup.helper.Validate; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element;

SQL解析器的性能测试

对同一个sql语句,使用3种解析器解析出ast语法树(这是编译原理上的说法,在sql解析式可能就是解析器自定义的statement类型),执行1100万次的时间对比. package demo.test; import java.io.StringReader; import java.sql.SQLSyntaxErrorException; import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.parser

如何实现一个Java Class 解析器

原文出处: tinylcy 最近在写一个私人项目,名字叫做ClassAnalyzer,ClassAnalyzer的目的是能让我们对Java Class文件的设计与结构能够有一个深入的理解.主体框架与基本功能已经完成,还有一些细节功能日后再增加.实际上JDK已经提供了命令行工具javap来反编译Class文件,但本篇文章将阐明我实现解析器的思路. Class文件 作为类或者接口信息的载体,每个Class文件都完整的定义了一个类.为了使Java程序可以"编写一次,处处运行",Java虚拟机

mybtis plus 3.2.0 动态表名sql解析器的配置

一.Configuration @Configuration public class MybatisPlusConfiguration { public static ThreadLocal<String> inputTableName = new ThreadLocal<>(); @Bean public PaginationInterceptor paginationInterceptor(){ PaginationInterceptor paginationIntercep

SQL解析器

主要分为词法分析.语法和语义分析.优化.执行代码生成,分析后的代码会生成语法树 参考:http://www.elecfans.com/emb/20180618696111.html 原文地址:https://www.cnblogs.com/fxtx/p/11456494.html

atitit.java解析sql语言解析器解释器的实现

1. 解析sql的本质:实现一个4gl dsl编程语言的编译器 1 2. 解析sql的基本的流程,词法分析,而后进行语法分析,语义分析,构建sql的AST 1 3. 词法分析器 2 4. 语法分析器--ANTLR 2 5. Eclipse插件,,ANTLR Studio 3 6. 一个基于javacc实现的解析器JSqlParser0.7(yr2011), 3 7. 样例代码-----解析sql表格列的名称and类型 3 8. }Sql的历史 4 9. 解析select语句 4 10. zql,

MySQL技术探索01实现SQL语法解析器

本文将介绍如何使用开源的语法和词法分析框架bison和flex来实现SQL解析器.出于技术学习的目的,本文做描述的微型SQL解析器仅能实现对微型SQL的语法解析. 1.MySQL中的SQL解析器 包括JDBC.ODBC.ADO等等关系数据库客户端应用开发框架在内的各种SDK,核心功能是帮助程序员简化各种客户端的数据库操作,同时将SQL语句通过网络形式发送给MySQL等关系数据库的服务器进程.MySQL服务器进行负责解析并执行这些SQL语句.SQL语句中的语法规则多种多样,MySQL服务器是如何实

MySQL内核源码解读-SQL解析之解析器浅析

MYSQL服务器接收SQL格式的查询,首先要对sql进行解析,内部将文本格式转换为二进制结构,这个转换就是解析器,解析的目的是为了让优化器更好的处理指令,以便以最优的路径,最少的耗时返回我们想要的结果.sql解析器的构成:1.词法分析(Lexical scanner):作用是将整个查询分解为多个元素.2.语法规则(Grammar rule module):寻找sql语法规则组合,产生一个序列,执行这些规则相关的代码.1 and 2 产生一棵解析树,提供给优化器使用.mysql解析器的特殊性在于它

数据库中间件 Sharding-JDBC 源码分析 —— SQL 解析(一)之语法解析

关注微信公众号:[芋艿的后端小屋]有福利: RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表 RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址 您对于源码的疑问每条留言都将得到认真回复.甚至不知道如何读源码也可以请教噢. 新的源码解析文章实时收到通知.每周更新一篇左右. 1. 概述 2. Lexer 词法解析器 3. Token 词法标记 3.2.1 Literals.IDENTIFIER 词法关键词 3.2