一种SQL限定查询子句生成方法和组合逻辑过滤器与流程

文档序号:12465605阅读:314来源:国知局
一种SQL限定查询子句生成方法和组合逻辑过滤器与流程

本发明涉及分布式计算应用领域,尤其涉及一种SQL限定查询子句生成方法和组合逻辑过滤器。



背景技术:

SQL(Structured Query Language,结构化查询语言)是一种特殊目的的编程语言,是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统,可以使用相同的结构化查询语言作为数据输入与管理的接口。同时,SQL语句可以嵌套,这使它具有极大的灵活性和强大的功能。现被广泛用于存取数据以及查询、更新和管理关系数据库系统。

目前,SQL限定查询语句的生成方法有两种方法:

第一种方式,采取字符串拼接的方式,如:用户界面上有NAME(名称),ADDRESS(地址)两个字段的查询条件,则可在程序中根据几种不同的输入状态来完成查询条件的拼接:当NAME输入不为空时,将与NAME有关的条件拼接到查询语句中;同样,当ADDRESS字段输入不为空时,则将与ADDRESS有关的条件拼接到查询语句中。

这种方式虽然执行路径较优,但编程过程复杂,特别的是查询条件中当有比较复杂的逻辑结构时,则复杂度更高;

第二种方式,采取OR(或)的方式进行,以ORACLE为例,用户界面上有NAME,ADDRESS两个字段的查询条件时,可以将SQL的WHERE子句写为:(:NAME IS NULL OR NAME LIKE:NAME)AND(:ADDRESS IS NULL OR ADDRESS LIKE:ADDRESS)。

第二种方式虽然可以简化程序代码,但会让执行路径变得非常糟糕,使索引不能得到有效利用。



技术实现要素:

(一)要解决的技术问题

为了简单且较优的生成限定查询子句,本发明提供一种SQL限定查询子句生成方法和组合逻辑过滤器,调用GetSQL虚方法获取SQL语句,调用GetParameters虚方法获取参数值,根据获取的参数值逻辑拼接获取的SQL语句,拼接出的限定查询子句的执行路径较优且实现简单。

(二)技术方案

为了达到上述目的,本发明采用的主要技术方案包括:

一种结构化查询语言SQL限定查询子句的生成方法,所述方法应用于组合逻辑过滤器,所述组合逻辑过滤器由一个或多个基础数据过滤器组成;所述基础数据过滤器,包括用于获取参数值的GetParameters虚方法和用于获取SQL语句的GetSQL虚方法;

所述方法包括:

101,调用所述基础数据过滤器所包括的GetSQL虚方法获取SQL语句;

102,调用所述基础数据过滤器所包括的GetParameters虚方法获取参数值;

103,根据获取的参数值逻辑拼接获取的SQL语句。

可选地,步骤103具体包括:

103-1,根据获取的参数值,确定获取的SQL语句输入参数的参数值;

103-2,逻辑拼接输入参数的参数值非空的SQL语句。

可选地,所述组合逻辑过滤器为与逻辑过滤器;

步骤103-2具体包括:

用AND符号拼接输入参数的参数值非空的SQL语句。

可选地所述组合逻辑过滤器为或逻辑过滤器;

步骤103-2具体包括:

用OR符号拼接输入参数的参数值非空的SQL语句。

可选地,所述基础数据过滤器为SQL过滤器。

除此之外,本发明采用的主要技术方案还包括:

一种组合逻辑过滤器,所述组合逻辑过滤器由一个或多个基础数据过滤器组成;

所述基础数据过滤器,包括用于获取参数值的GetParameters虚方法和用于获取结构化查询语言SQL语句的GetSQL虚方法;

所述组合逻辑过滤器,用于调用所述基础数据过滤器所包括的GetSQL虚方法获取SQL语句;调用所述基础数据过滤器所包括的GetParameters虚方法获取参数值;根据获取的参数值逻辑拼接获取的SQL语句。

可选地,所述组合逻辑过滤器,用于根据获取的参数值,确定获取的SQL语句输入参数的参数值;逻辑拼接输入参数的参数值非空的SQL语句。

可选地,组合逻辑过滤器为基类;所述组合逻辑过滤器的子类为与逻辑过滤器;

所述与逻辑过滤器,用于用AND符号拼接输入参数的参数值非空的SQL语句。

可选地,组合逻辑过滤器为基类;所述组合逻辑过滤器的子类为或逻辑过滤器;

所述或逻辑过滤器,用于用OR符号拼接输入参数的参数值非空的SQL语句。

可选地,所述基础数据过滤器为基类,所述基础数据过滤器的子类为SQL过滤器。

(三)有益效果

本发明的有益效果是:调用GetSQL虚方法获取SQL语句,调用GetParameters虚方法获取参数值,根据获取的参数值逻辑拼接获取的SQL语句,拼接出的限定查询子句的执行路径较优且实现简单。

附图说明

图1为本发明一个实施例提供的一种SQL限定查询子句的生成方法流程图;

图2为本发明一个实施例提供的一种类图示意图;

图3为本发明一个实施例提供的另一种SQL限定查询子句的生成方法流程图。

具体实施方式

为了更好的解释本发明,以便于理解,下面结合附图,通过具体实施方式,对本发明作详细描述。

传统的SQL限定查询语句的生成方法有两种方法:第一种方式,采取字符串拼接的方式。这种方式虽然执行路径较优,但编程过程复杂,特别的是查询条件中当有比较复杂的逻辑结构时,则复杂度更高。第二种方式,采取OR(或)的方式进行。第二种方式虽然可以简化程序代码,但会让执行路径变得非常糟糕,使索引不能得到有效利用。本发明调用GetSQL虚方法获取SQL语句,调用GetParameters虚方法获取参数值,根据获取的参数值逻辑拼接获取的SQL语句,拼接出的限定查询子句的执行路径较优且实现简单。

参见图1,本实施例提供了一种SQL限定查询子句的生成方法,该方法应用于组合逻辑过滤器,该组合逻辑过滤器由一个或多个基础数据过滤器组成;基础数据过滤器,包括用于获取参数值的GetParameters虚方法和用于获取SQL语句的GetSQL虚方法;

该方法包括:

101,调用基础数据过滤器所包括的GetSQL虚方法获取SQL语句。

102,调用基础数据过滤器所包括的GetParameters虚方法获取参数值。

103,根据获取的参数值逻辑拼接获取的SQL语句。

可选地,步骤103具体包括:

103-1,根据获取的参数值,确定获取的SQL语句输入参数的参数值。

103-2,逻辑拼接输入参数的参数值非空的SQL语句。

可选地,组合逻辑过滤器为与逻辑过滤器;

步骤103-2具体包括:

用AND符号拼接输入参数的参数值非空的SQL语句。

可选地,组合逻辑过滤器为或逻辑过滤器;

步骤103-2具体包括:

用OR符号拼接输入参数的参数值非空的SQL语句。

可选地,基础数据过滤器为SQL过滤器。

本发明的有益效果是:调用GetSQL虚方法获取SQL语句,调用GetParameters虚方法获取参数值,根据获取的参数值逻辑拼接获取的SQL语句,拼接出的限定查询子句的执行路径较优且实现简单。

本发明提供的一种SQL限定查询子句的生成方法应用于图2所示的类结构中,该类结构中包括

1、组合逻辑过滤器(CompositeLogicFilter),是所有逻辑过滤器的基类,其有个一名为ChildDataFilters的集合属性,表示组合逻辑过滤器是由多个基础数据过滤器(BaseDataFilter)组成的。

(1)AndLogicFilter,为与逻辑过滤器,是CompositeLogicFilter的子类,用于实现各个基础数据过滤器的子类的与方式的拼接。

(2)OrLogicFilter,为或逻辑过滤器,是CompositeLogicFilter的子类,用于实现各个基础数据过滤器的子类的与方式的拼接。

2、BaseDataFilter,是所有数据过滤器的基类。其包括如下两个虚方法,由BaseDataFilter的各个子类自行实现:

(1)GetParameters虚方法,用于获取数据过滤器的所有参数。

(2)GetSQL虚方法,用于获取SQL语句。

BaseDataFilter的子类为SQL过滤器(SqlFilter)和CompositeLogicFilter。

●对于GetParameters虚方法,其在SqlFilter中返回的是ParameterName。其在CompositeLogicFilter中返回的是所有ChildDataFilters的GetParameters并联后的结果;

●对于GetSQL虚方法,其在SqlFilter中返回的是SQL特性(属性)。在AndLogicalFilter中返回是ChildDataFilters中所有输入参数不为空的GetSQL方法返回值用AND符号拼接后的结果。在OrLogicalFilter中,此方法返回是ChildDataFilters中所有输入参数不为空的GetSQL方法返回值用OR符号拼接后的结果。

另外,SqlFilter中包含了一个过滤器子句,并且有一个ParameterName标识参数名称,此参数名称与GetSQL中的parameterValues中的参数名称对应,如果在parameterValues中找不到ParameterName,则可认为此SqlFilter不应当被包含在最终的SQL中。

基于图2所示的类图,以CompositeLogicFilter的子类OrLogicFilter执行SQL限定查询子句的生成方法的过程为例进行再次说明,参见图3。

301,OrLogicFilter调用SqlFilter所包括的GetSQL虚方法获取SQL语句。

302,OrLogicFilter调用SqlFilter所包括的GetParameters虚方法获取参数值。

303,OrLogicFilter根据获取的参数值,确定获取的SQL语句输入参数的参数值,用OR符号拼接输入参数的参数值非空的SQL语句。

下面再基于图2所示的类图,以CompositeLogicFilter的子类AndLogicalFilter执行SQL限定查询子句的生成方法的过程为例进行再次说明。

如果有下面的构造:

则,当:NAME参数有值,:ADDRESS为空时,最终生成限定查询WHERE子句是:

NAME LIKE:NAME

当:NAME参数为空,:ADDRESS有值时,最终生成WHERE子句是:

ADDRESS LIKE:ADDRESS

当:NAME和:ADDRESS都有值时,最终生成WHERE子句是:

(NAME LIKE:NAME)AND(ADDRESS LIKE:ADDRESS)

本实施例提供的方法中,涉及的所有过滤器都有两个公共的方法:一是获取参数列表,用于获取数据过滤器中的参数,一是根据输入参数的值获取最终的WHERE子句的方法。通过本实施例提供的方法可以拼接出执行路径优化的SQL WHERE子句。

本实施例提供的方法调用GetSQL虚方法获取SQL语句,调用GetParameters虚方法获取参数值,根据获取的参数值逻辑拼接获取的SQL语句,拼接出的限定查询子句的执行路径较优且实现简单。

基于同一发明构思,本发明还提供一种组合逻辑过滤器,该组合逻辑过滤器由一个或多个基础数据过滤器组成;

其中,基础数据过滤器,包括用于获取参数值的GetParameters虚方法和用于获取结构化查询语言SQL语句的GetSQL虚方法;

组合逻辑过滤器,用于调用基础数据过滤器所包括的GetSQL虚方法获取SQL语句;调用基础数据过滤器所包括的GetParameters虚方法获取参数值;根据获取的参数值逻辑拼接获取的SQL语句。

可选地,组合逻辑过滤器,用于根据获取的参数值,确定获取的SQL语句输入参数的参数值;逻辑拼接输入参数的参数值非空的SQL语句。

可选地,组合逻辑过滤器为基类;组合逻辑过滤器的子类为与逻辑过滤器;

与逻辑过滤器,用于用AND符号拼接输入参数的参数值非空的SQL语句。

可选地,组合逻辑过滤器为基类;组合逻辑过滤器的子类为或逻辑过滤器;

或逻辑过滤器,用于用OR符号拼接输入参数的参数值非空的SQL语句。

可选地,基础数据过滤器为基类,基础数据过滤器的子类为SQL过滤器,且基础数据过滤器的子类为组合逻辑过滤器。

本实施例提供的组合逻辑过滤器调用GetSQL虚方法获取SQL语句,调用GetParameters虚方法获取参数值,根据获取的参数值逻辑拼接获取的SQL语句,拼接出的限定查询子句的执行路径较优且实现简单。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1