SQL处理方法、SQL处理系统技术方案

技术编号:32886790 阅读:14 留言:0更新日期:2022-04-02 12:22
本发明专利技术提供一种SQL处理方法、SQL处理系统,所述方法包括:基于Druid组件解析SQL输入参数的数据类型;根据传参修改所述输入参数为预编译格式并保留有顺序的传参列表,将变更后的Druid组件的语法表达式转换为SQL;通过预编译模式执行SQL。本发明专利技术可将配置的SQL解析出输入参数,方便用户动态传参,可以实现参数、过滤条件等不同条件下的SQL执行,且使用Druid组件来实现解析SQL,在SQL语法树的遍历上更加灵活,能够针对所需的SQL表达式做特殊处理,实现方式更加便捷。方式更加便捷。方式更加便捷。

【技术实现步骤摘要】
SQL处理方法、SQL处理系统


[0001]本专利技术涉及大数据技术数据处理
,具体涉及一种SQL(Structured Query Language,结构化查询语言)处理方法、一种SQL处理系统。

技术介绍

[0002]目前主流的SQL解析工具主要为Calcite(一种动态数据管理框架)和正则表达式。
[0003]Calcite方式解析出的语法树需要自定义方法去遍历整棵树,不够方便,且无法完成在一次遍历语法树中修改SQL中的部分属性。正则表达式的方式则无法精准的根据SQL的上下文语意解析出所需的参数,且实现方式和后续维护较为困难。

技术实现思路

[0004]为解决上述技术问题,本专利技术的第一个目的在于提出一种SQL处理方法。
[0005]本专利技术的第二个目的在于提出一种SQL处理系统。
[0006]本专利技术采用的技术方案如下:
[0007]本专利技术第一方面的实施例提出了一种SQL处理方法,包括以下步骤:基于Druid(一种专为大型数据集上的高性能切片和联机分析处理而设计的数据存储)组件解析SQL输入参数的数据类型;根据传参修改所述输入参数为预编译格式并保留有顺序的传参列表,将变更后的Druid组件的语法表达式转换为SQL;通过预编译模式执行SQL。
[0008]本专利技术上述提出的SQL处理方法还可以具有如下附加技术特征:
[0009]根据本专利技术的一个实施例,基于Druid组件解析SQL输入参数,具体包括:继承Druid组件中的SQLASTVisitorAdapter实现TablesVisitor类,遍历并获取SQL from表达式中的表信息;通过JDBC(Java Database Connectivity,Java数据库连接)查询表的字段信息;通过WhereItemsVisitor类,遍历SQL where语法中的表达式,获取符合输入参数格式的为所述输入参数;通过输入参数对应的字段判断所述输入参数的数据类型。
[0010]根据本专利技术的一个实施例,根据传参修改所述输入参数为预编译格式并保留有顺序的传参列表,并将Druid组件的语法表达式转换为SQL,包括:遍历where过滤条件表达式;判断所述表达式是否符合输入参数格式,如果所述输入参数在所述传参中存在则替换为预编译格式,并将所述传参按顺序记录下来;实现WhereSpaceHolderVisitor类,遍历where过滤条件表达式,获取仍持有输入参数的过滤条件;通过正则表达式将所述持有输入参数的过滤条件替换为空字符串;清理where关键字后过滤条件为空的where语句;将变更后的Druid的语法表达式转换为SQL。
[0011]根据本专利技术的一个实施例,通过预编译模式执行SQL,包括:根据所述SQL输入参数的数据类型转换所述传参为java(面向对象编程语言)数据类型;根据预编译模式SQL,通过JDBC辅以java数据类型的传参执行得到最终结果。
[0012]本专利技术第二方面的实施例提出了一种SQL处理系统,包括:解析模块,所述解析模块用于基于Druid组件解析SQL输入参数的数据类型;转换模块,所述转换模块用于根据传
参修改所述输入参数为预编译格式并保留有顺序的传参列表,将变更后的Druid组件的语法表达式转为SQL;执行模块,所述执行模块用于通过预编译模式执行SQL。
[0013]本专利技术上述提出的SQL处理系统还可以具有如下附加技术特征:
[0014]根据本专利技术的一个实施例,所述解析模块具体用于:继承Druid组件中的SQLASTVisitorAdapter实现TablesVisitor类,遍历并获取SQL from表达式中的表信息;通过JDBC查询表的字段信息;通过WhereItemsVisitor类,遍历SQL where语法中的表达式,获取符合输入参数格式的为所述输入参数;通过输入参数对应的字段判断所述输入参数的数据类型。
[0015]根据本专利技术的一个实施例,所述转换模块具体用于:遍历where过滤条件表达式;判断所述表达式是否符合输入参数格式,如果所述输入参数在所述传参中存在则替换为预编译格式,并将所述传参按顺序记录下来;实现WhereSpaceHolderVisitor类,遍历where过滤条件表达式,获取仍持有输入参数的过滤条件;通过正则表达式将所述持有输入参数的过滤条件替换为空字符串;清理where关键字后过滤条件为空的where语句;将变更后的Druid的语法表达式转换为SQL。
[0016]根据本专利技术的一个实施例,所述执行模块具体用于:根据所述SQL输入参数的数据类型转换所述传参为java数据类型;根据预编译模式SQL,通过JDBC辅以java数据类型的传参执行得到最终结果。
[0017]本专利技术的有益效果:
[0018]本专利技术可将配置的SQL解析出输入参数,方便用户动态传参,可以实现参数、过滤条件等不同条件下的SQL执行,且使用Druid组件来实现解析SQL,在SQL语法树的遍历上更加灵活,能够针对所需的SQL表达式做特殊处理,实现方式更加便捷。
附图说明
[0019]图1是根据本专利技术一个实施例的SQL处理方法的流程图;
[0020]图2是根据本专利技术一个实施例的Visitor类继承关系示意图;
[0021]图3是根据本专利技术一个实施例的SQL处理系统的方框示意图。
具体实施方式
[0022]下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0023]图1是根据本专利技术一个实施例的SQL处理方法的流程图。如图1所示,该方法包括以下步骤:
[0024]S1,基于Druid组件解析SQL输入参数的数据类型。
[0025]进一步地,根据本专利技术的一个实施例,基于Druid组件解析SQL输入参数,具体包括:继承Druid组件中的SQLASTVisitorAdapter实现TablesVisitor类,遍历并获取SQL from表达式中的表信息;通过JDBC查询表的字段信息;通过WhereItemsVisitor类,遍历SQL where语法中的表达式,获取符合输入参数格式的为输入参数;通过输入参数对应的字段判
断输入参数的数据类型。
[0026]具体地,基于Druid组件解析SQL输入参数的数据类型的目的是将初始SQL过滤条件中参数值为输入参数格式的输入参数解析出来。
[0027]Visitor类继承关系可参照图2所示。其中,SQLASTVisitorAdapter是druid组件对外提供的遍历语法树的适配器,TablesVisitor、whereItemsVisitor是继承自SQLASTVisitorAdapter,实现的针对不同语法表达式的语法解析器。ta本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种SQL处理方法,其特征在于,包括以下步骤:基于Druid组件解析SQL输入参数的数据类型;根据传参修改所述输入参数为预编译格式并保留有顺序的传参列表,将变更后的Druid组件的语法表达式转换为SQL;通过预编译模式执行SQL。2.根据权利要求1所述的SQL处理方法,其特征在于,基于Druid组件解析SQL输入参数,具体包括:继承Druid组件中的SQLASTVisitorAdapter实现TablesVisitor类,遍历并获取SQL from表达式中的表信息;通过JDBC查询表的字段信息;通过WhereItemsVisitor类,遍历SQL where语法中的表达式,获取符合输入参数格式的为所述输入参数;通过输入参数对应的字段判断所述输入参数的数据类型。3.根据权利要求2所述的SQL处理方法,其特征在于,根据传参修改所述输入参数为预编译格式并保留有顺序的传参列表,并将Druid组件的语法表达式转换为SQL,包括:遍历where过滤条件表达式;判断所述表达式是否符合输入参数格式,如果所述输入参数在所述传参中存在则替换为预编译格式,并将所述传参按顺序记录下来;实现WhereSpaceHolderVisitor类,遍历where过滤条件表达式,获取仍持有输入参数的过滤条件;通过正则表达式将所述持有输入参数的过滤条件替换为空字符串;清理where关键字后过滤条件为空的where语句;将变更后的Druid的语法表达式转换为SQL。4.根据权利要求3所述的SQL处理方法,其特征在于,通过预编译模式执行SQL,包括:根据所述SQL输入参数的数据类型转换所述传参为java数据类型;根据预编译模式SQL,通过JDBC辅以java数据类型的传参执行...

【专利技术属性】
技术研发人员:甄月朋
申请(专利权)人:杭州玳数科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1