本发明涉及计算机技术领域,并且更具体地,涉及一种基于sql语言的语法语句的扩展方法及系统。
背景技术:
在软件中通过sql语句对数据库进行查询等操作的时候,我们需要根据不同的查询条件过滤出我们需要的数据。而在编写sql语句的时候,会将条件拼装到sql语句的where条件语句中。
一般编写的sql语句会将每个条件、条件之间的关系等写入到sql语句中。为了让的sql语句避免出现注入风险,一般使用如下方法编写where条件语句:whereccode=?orcnamelike?,然后通过编码传递参数进行sql语句查询。使用的时候必须将所有的条件进行传递才能完成查询。然而在正常程序开发中,并不是每次都使用全部的条件,而是使用部分条件进行查询,这样sql语句可能需要动态进行生成,或者替换之后才能进行查询,这样会大大提升编码数量和编码难度。
技术实现要素:
本发明提出一种基于sql语言的语法语句的扩展方法及系统,以解决如何对sql语句进行扩展,自动生成变量传递参数进行条件查询的问题。
为了解决上述问题,根据本发明的一个方面,提供了一种基于sql语言的语法语句的扩展方法,所述方法包括:
获取基于预设的where条件语法编写规则编写的sql查询语句,并解析所述sql查询语句中每个语法语句的开始标记和每个语法语句中的传递参数的值;
对于任一个语法语句,当该语法语句中存在传递参数的值时,根据该语法语句中传递参数的值,基于预设的where语法语句解析规则对该语法语句进行解析和翻译,以确定该语法语句对应的执行语句;
对于任一个语法语句,当该语法语句中不存在传递参数的值时,根据该语法语句的开始标记,基于预设的where语法语句解析规则进行解析和翻译,以确定该语法语句对应的执行语句;
利用确定的执行语句替换与其对应的语法语句,确定所述sql查询语句对应的sql执行语句。
优选地,其中所述预设的where条件语法编写规则,包括:
操作符in、notin、equal、unequal、between、between2、like和unlike的语法编写规则;以及
根据传递参数中的key值对应的数据是否存在使用,确定开始标记;其中,所述开始标记包括:第一预设字符和第二预设字符;若查询时没有传递参数中所需的key对应数据,则以第一预设字符作为开始标记;反之,以第二预设字符作为开始标记。
优选地,其中所述当该语法语句中存在传递参数的值时,根据该语法语句中传递参数的值,基于预设的where语法语句解析规则对该语法语句进行解析和翻译,以确定该语法语句对应的执行语句,包括:
对equal和unequal语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个参数或第三个参数为key的数据,并根据第二个参数或第三个参数为key的数据进行翻译,以确定该语法语句对应的执行语句;
对in和notin语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个参数为key的数据,并当该数据为数组格式时,根据二个参数为key的数据和数组长度进行翻译,以确定该语法语句对应的执行语句;
对between和between2语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个和第三个参数为key对应的数据,并根据第二个参数或第三个参数为key的数据进行翻译,以确定该语法语句对应的执行语句;
对like和unlike语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个参数为key对应的数据和第三个参数,并根据第二个参数为key对应的数据和第三个参数进行翻译,以确定该语法语句对应的执行语句。
优选地,其中所述当该语法语句中不存在传递参数的值时,根据该语法语句的开始标记,基于预设的where语法语句解析规则进行解析和翻译,以确定该语法语句对应的执行语句,包括:
当该语法语句中不存在传递参数的值时,确定该语法语句的开始标记,若所述开始标记为第一预设字符,则直接将该语法语句翻译为‘1=1’,表示为忽略当前条件;若所述开始标记为第二预设字符,则直接将该语法语句翻译为‘1=2’,表示没有数据满足条件。
优选地,其中所述第一预设字符为‘$’;所述第二预设字符为‘#’。
根据本发明的另一个方面,提供了一种基于sql语言的语法语句的扩展系统,所述系统包括:
语句解析单元,用于获取基于预设的where条件语法编写规则编写的sql查询语句,并解析所述sql查询语句中每个语法语句的开始标记和每个语法语句中的传递参数的值;
第一执行语句确定单元,用于对于任一个语法语句,当该语法语句中存在传递参数的值时,根据该语法语句中传递参数的值,基于预设的where语法语句解析规则对该语法语句进行解析和翻译,以确定该语法语句对应的执行语句;
第二执行语句确定单元,用于对于任一个语法语句,当该语法语句中不存在传递参数的值时,根据该语法语句的开始标记,基于预设的where语法语句解析规则进行解析和翻译,以确定该语法语句对应的执行语句;
执行语句确定单元,用于利用确定的执行语句替换与其对应的语法语句,确定所述sql查询语句对应的sql执行语句。
优选地,其中所述预设的where条件语法编写规则,包括:
操作符in、notin、equal、unequal、between、between2、like和unlike的语法编写规则;以及
根据传递参数中的key值对应的数据是否存在使用,确定开始标记;其中,所述开始标记包括:第一预设字符和第二预设字符;若查询时没有传递参数中所需的key对应数据,则以第一预设字符作为开始标记;反之,以第二预设字符作为开始标记。
优选地,其中所述第一执行语句确定单元,当该语法语句中存在传递参数的值时,根据该语法语句中传递参数的值,基于预设的where语法语句解析规则对该语法语句进行解析和翻译,以确定该语法语句对应的执行语句,包括:
对equal和unequal语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个参数或第三个参数为key的数据,并根据第二个参数或第三个参数为key的数据进行翻译,以确定该语法语句对应的执行语句;
对in和notin语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个参数为key的数据,并当该数据为数组格式时,根据二个参数为key的数据和数组长度进行翻译,以确定该语法语句对应的执行语句;
对between和between2语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个和第三个参数为key对应的数据,并根据第二个参数或第三个参数为key的数据进行翻译,以确定该语法语句对应的执行语句;
对like和unlike语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个参数为key对应的数据和第三个参数,并根据第二个参数为key对应的数据和第三个参数进行翻译,以确定该语法语句对应的执行语句。
优选地,其中所述第二执行语句确定单元,当该语法语句中不存在传递参数的值时,根据该语法语句的开始标记,基于预设的where语法语句解析规则进行解析和翻译,以确定该语法语句对应的执行语句,包括:
当该语法语句中不存在传递参数的值时,确定该语法语句的开始标记,若所述开始标记为第一预设字符,则直接将该语法语句翻译为‘1=1’,表示为忽略当前条件;若所述开始标记为第二预设字符,则直接将该语法语句翻译为‘1=2’,表示没有数据满足条件。
优选地,其中所述第一预设字符为‘$’;所述第二预设字符为‘#’。
本发明提供了一种基于sql语言的语法语句的扩展方法及系统,根据定义的编写规则,事先将所有的查询条件写入到sql语句中,真正查询的时候,根据所需要的条件动态生成传递参数进行查询,查询之前会根据定义的扩展查询条件的语法解析规则进行sql语句的动态生成,并且自动生成变量传递参数进行条件查询,根据生成的查询sql和查询参数获取我们最终的结果。这样可以在不修改sql语句,而只通过传递参数进行sql语句的扩展,在不修改程序代码的同时,提高程序的扩展性,可以提升开发效率,让代码更易于阅读和维护。
附图说明
通过参考下面的附图,可以更为完整地理解本发明的示例性实施方式:
图1为根据本发明实施方式的基于sql语言的语法语句的扩展方法100的流程图;以及
图2为根据本发明实施方式的基于sql语言的语法语句的扩展系统200的结构示意图。
具体实施方式
现在参考附图介绍本发明的示例性实施方式,然而,本发明可以用许多不同的形式来实施,并且不局限于此处描述的实施例,提供这些实施例是为了详尽地且完全地公开本发明,并且向所属技术领域的技术人员充分传达本发明的范围。对于表示在附图中的示例性实施方式中的术语并不是对本发明的限定。在附图中,相同的单元/元件使用相同的附图标记。
除非另有说明,此处使用的术语(包括科技术语)对所属技术领域的技术人员具有通常的理解含义。另外,可以理解的是,以通常使用的词典限定的术语,应当被理解为与其相关领域的语境具有一致的含义,而不应该被理解为理想化的或过于正式的意义。
图1为根据本发明实施方式的基于sql语言的语法语句的扩展方法100的流程图。如图1所示,本发明实施方式提供的基于sql语言的语法语句的扩展方法,根据定义的编写规则,事先将所有的查询条件写入到sql语句中,真正查询的时候,根据所需要的条件动态生成传递参数进行查询,查询之前会根据定义的扩展查询条件的语法解析规则进行sql语句的动态生成,并且自动生成变量传递参数进行条件查询,根据生成的查询sql和查询参数获取我们最终的结果。这样可以在不修改sql语句,而只通过传递参数进行sql语句的扩展,在不修改程序代码的同时,提高程序的扩展性,可以提升开发效率,让代码更易于阅读和维护。本发明实施方式提供的基于sql语言的语法语句的扩展方法100,从步骤101处开始,在步骤101获取基于预设的where条件语法编写规则编写的sql查询语句,并解析所述sql查询语句中每个语法语句的开始标记和每个语法语句中的传递参数的值。
优选地,其中所述预设的where条件语法编写规则,包括:
操作符in、notin、equal、unequal、between、between2、like和unlike的语法编写规则;以及
根据传递参数中的key值对应的数据是否存在使用,确定开始标记;其中,所述开始标记包括:第一预设字符和第二预设字符;若查询时没有传递参数中所需的key对应数据,则以第一预设字符作为开始标记;反之,以第二预设字符作为开始标记。
优选地,其中所述第一预设字符为‘$’;所述第二预设字符为‘#’。
在本发明的实施方式中,按照常用的where条件语法使用,定制相应的语法规则,具体包括:in、notin、equal、unequal、between、between2、like、unlike等的语法编写规则。
其中,对于equal和unequal语法,该语法设计参数有三个(colname,param,default),第一个参数为sql查询语句的列,第二个参数是查询过程中传递数据的key,第三个参数为可选项,如果传递参数中不存在key,则使用该数据进行数据替换。
对于in和notin语法,该语法设计参数有两个(colname,paramlist),第一个参数为sql查询语句的列,第二个参数是查询过程中传递参数的key,key对应的值应该是一个数组语法才能正常执行。
对于between和between2语法,该语法设计参数有三个(colname,fromparam,toparam),第一个参数为sql查询语句的列,第二个参数为区间开始值在查询数据中对应的key,第三个参数为区间结束值在查询数据中对应的key。between和between2的区别在于包含不包含区间开始值和区间结束值。
对于like和unlike语法,该语法设计三个参数,(field,paramset,_paramset%),第一个参数为sql查询语句的列,第二个参数是查询过程中传递参数的key,第三个参数为可选固定格式,用来区分是左匹配、右匹配、左右匹配,如果不写第三个参数则翻译成左右匹配。
另外,针对每个规则都有相应的参数进行配置,都匹配了两个前缀,分别为“$”和“#”,用于区分参数传递与否,对应不同的查询结果。所有的设计语法都要以“$”、“#”开头,用来处理查询传递参数中的key对应的数据是否存在使用。如果查询的时候没有传递语法中所要的key对应数据,“$”开头时,则该语法解析成‘1=1’,意思为忽略当前条件,“#”开头时,则该语法解析成‘1=2’,意思是没有数据满足条件。
例如,使用本发明实施方式的编写规则编写的sql查询实例为:
在步骤102,对于任一个语法语句,当该语法语句中存在传递参数的值时,根据该语法语句中传递参数的值,基于预设的where语法语句解析规则对该语法语句进行解析和翻译,以确定该语法语句对应的执行语句。
优选地,其中所述当该语法语句中存在传递参数的值时,根据该语法语句中传递参数的值,基于预设的where语法语句解析规则对该语法语句进行解析和翻译,以确定该语法语句对应的执行语句,包括:
对equal和unequal语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个参数或第三个参数为key的数据,并根据第二个参数或第三个参数为key的数据进行翻译,以确定该语法语句对应的执行语句;
对in和notin语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个参数为key的数据,并当该数据为数组格式时,根据二个参数为key的数据和数组长度进行翻译,以确定该语法语句对应的执行语句;
对between和between2语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个和第三个参数为key对应的数据,并根据第二个参数或第三个参数为key的数据进行翻译,以确定该语法语句对应的执行语句;
对like和unlike语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个参数为key对应的数据和第三个参数,并根据第二个参数为key对应的数据和第三个参数进行翻译,以确定该语法语句对应的执行语句。
在步骤103,对于任一个语法语句,当该语法语句中不存在传递参数的值时,根据该语法语句的开始标记,基于预设的where语法语句解析规则进行解析和翻译,以确定该语法语句对应的执行语句。
优选地,其中所述当该语法语句中不存在传递参数的值时,根据该语法语句的开始标记,基于预设的where语法语句解析规则进行解析和翻译,以确定该语法语句对应的执行语句,包括:
当该语法语句中不存在传递参数的值时,确定该语法语句的开始标记,若所述开始标记为第一预设字符,则直接将该语法语句翻译为‘1=1’,表示为忽略当前条件;若所述开始标记为第二预设字符,则直接将该语法语句翻译为‘1=2’,表示没有数据满足条件。
在编写完成sql语句之后,程序中调用这些sql语句进行查询的时候,需要按照定好的规则,传递键值对数据查询,如java中传递hashmap数据类型作为查询参数,hashmap对应的key为sql语句中编写的参数名称,key对应的值则为我们替换sql所需要的参数。
所有的语法都会首先解析语法的开始标记:“$”、“#”,然后语法中对应的参数为key去查询传递参数中获取对应的值,如果不存在,则解析语法中的默认值作为传递参数。若传递参数存在,则继续按照语法规则解析相应的sql语句,如果不存在则直接翻译成1=1或者1=2进行sql语句查询并且不做参数传递处理。
对于equal和unequal语法的解析,根据语法规则,从传递参数中获取第二个参数为key的数据,如果为空,则使用第三个参数的配置,都为空的情况直接按照“$”和“#”语法规则解析。将equal语法翻译成“第一个参数=?”,将unequal语法翻译成“第一个参数!=?”的格式替换查询sql语句,并且将获取的数据写入到查询的参数中。
对于in和notin语法解析,根据语法规则,从传递参数中获取第二个参数为key的数据,判断数据是否为数组格式。数据不存在或者格式不匹配,直接按照“$”和“#”语法规则解析。判断数组的长度,将in语法翻译成“in(?,?,?...)”,问号的个数和数组的长度相同;将notin语法翻译成“in(?,?,?...)”,问号的个数和数组的长度相同。并将数组中的数据逐条写入到查询参数当中。
对于between和between2语法解析,根据语法规则,从传递参数中获取第二个和第三个参数为key对应的数据。获取的两个参数如果全部为空,直接按照“$”和“#”语法规则解析;只获取到了第二个参数对应的数据,between语法翻译为“第一个参数>=?”,between2翻译为“第一个参数>?”;只获取到了第三个参数对应的数据,between语法翻译为“第一个参数<=?”,between2语法翻译为“第一个参数<?”;获取到了两个参数,between语法翻译为“(第一个参数>=?and第一个参数<=?)”,between2语法翻译为“(第一个参数>?and第一个参数<?)”。将翻译后的sql语句替换之前的语法,并且将对应获取到的数据按照顺序写入查询参数当中。
对于like和unlike语法解析,根据语法规则,从传递参数中获取第二个参数为key对应的数据。如果获取不到,直接按照“$”和“#”语法规则解析。获取到,like语法翻译为“第一个参数like?”,unlike语法翻译为“第一个参数notlike?”。查看是否存在第三个参数,如果不存在第三个参数,查询参数写入“%获取数据%”;第三个参数为“_第二个参数%”,查询参数写入“获取数据%”;第三个参数为“%_第二个参数”,查询参数写入“%获取数据”。
在步骤104,利用确定的执行语句替换与其对应的语法语句,确定所述sql查询语句对应的sql执行语句。
在本发明的实施方式中,根据上述查询sql解析实例,将上面的sql语句进行查询。其中,程序传递参数为:{param1:条件1,param41:条件41,param51:条件51,param52:条件52,param6:条件6,param8:[条件81,条件82,条件83]}。
按照上面写的sql查询示例,具体查询条件解析如下:
#equal(t.field1,param1),获取key为“param1”对应数据为“条件1”,语法替换为“t.field1=?”,参数写入“条件1”。
$equal(t.field2,param2),没有找到key为“param2”对应数据,按照“$”和“#”替换规则替换为“1=1”。
$equal(t.field3,param3,'default'),没有找到key为“param3”对应数据,参数中存在默认值,语法替换为“t.field1=?”,参数写入“default”;
$between(t.field4,param41,param42),获取key为“param41”对应的值为“条件41”,没有找到参数42对应的值,按照语法解析规则,语法替换为“t.field4>=?”,参数写入“条件41”。
$between2(t.field5,param51,param52)获取key为“param51”对应的值为“条件51”,获取key为“param52”对应的值为“条件52”,按照语法解析规则,语法替换为“(t.field5>?andt.field5<?)”,参数逐条写入“条件51”、“条件52”。
$like(t.field6,param6,_param6%),获取key为“param6”对应的值为“条件6”,第三个参数格式为“_第二个参数%”,按照语法规则替换为“t.field6like?”,参数写入为“条件6%”。
#notin(t.field7,param7),没有获取到key为“param7”对应的数据,按照“$”和“#”替换规则替换为“1=2”。
$in(t.field8,paramlist8),获取key为“param6”对应的值为“[条件81,条件82,条件83]”,获取的值长度为3,按照规则将语法替换为“t.field8in(?,?,?)”,依次写入查询参数“条件81”、“条件82”、“条件83”。
因此,可以得到最终执行的sql查询语句为:
对应的sql查询传入的具体参数为:[“条件1”,“default”,“条件41”,“条件51”,“条件52”,“条件6%”,“条件81”,“条件82”,“条件83”]。
本发明实施方式的方法设计equal、unequal、in、notin、between、between2、like、unlike等语法规则,几乎涵盖where查询语句中的全部条件;在sql语句执行时,接收传递来的参数,结合前面的语法规则进行sql语句的解析和翻译,最终执行查询,能够在不修改sql语句,而只通过传递参数进行sql语句的扩展,在不修改程序代码的同时,提高程序的扩展性。
图2为根据本发明实施方式的基于sql语言的语法语句的扩展系统200的结构示意图。如图2所示,本发明实施方式提供的基于sql语言的语法语句的扩展系统200,包括:语句解析单元201、第一执行语句确定单元202、第二执行语句确定单元203和执行语句确定单元204。
优选地,所述语句解析单元201,用于获取基于预设的where条件语法编写规则编写的sql查询语句,并解析所述sql查询语句中每个语法语句的开始标记和每个语法语句中的传递参数的值。
优选地,其中所述预设的where条件语法编写规则,包括:
操作符in、notin、equal、unequal、between、between2、like和unlike的语法编写规则;以及
根据传递参数中的key值对应的数据是否存在使用,确定开始标记;其中,所述开始标记包括:第一预设字符和第二预设字符;若查询时没有传递参数中所需的key对应数据,则以第一预设字符作为开始标记;反之,以第二预设字符作为开始标记。
优选地,其中所述第一预设字符为‘$’;所述第二预设字符为‘#’。
优选地,所述第一执行语句确定单元202,用于对于任一个语法语句,当该语法语句中存在传递参数的值时,根据该语法语句中传递参数的值,基于预设的where语法语句解析规则对该语法语句进行解析和翻译,以确定该语法语句对应的执行语句。
优选地,其中所述第一执行语句确定单元202,当该语法语句中存在传递参数的值时,根据该语法语句中传递参数的值,基于预设的where语法语句解析规则对该语法语句进行解析和翻译,以确定该语法语句对应的执行语句,包括:
对equal和unequal语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个参数或第三个参数为key的数据,并根据第二个参数或第三个参数为key的数据进行翻译,以确定该语法语句对应的执行语句;
对in和notin语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个参数为key的数据,并当该数据为数组格式时,根据二个参数为key的数据和数组长度进行翻译,以确定该语法语句对应的执行语句;
对between和between2语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个和第三个参数为key对应的数据,并根据第二个参数或第三个参数为key的数据进行翻译,以确定该语法语句对应的执行语句;
对like和unlike语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个参数为key对应的数据和第三个参数,并根据第二个参数为key对应的数据和第三个参数进行翻译,以确定该语法语句对应的执行语句。
优选地,所述第二执行语句确定单元203,用于对于任一个语法语句,当该语法语句中不存在传递参数的值时,根据该语法语句的开始标记,基于预设的where语法语句解析规则进行解析和翻译,以确定该语法语句对应的执行语句。
优选地,其中所述第二执行语句确定单元203,当该语法语句中不存在传递参数的值时,根据该语法语句的开始标记,基于预设的where语法语句解析规则进行解析和翻译,以确定该语法语句对应的执行语句,包括:
当该语法语句中不存在传递参数的值时,确定该语法语句的开始标记,若所述开始标记为第一预设字符,则直接将该语法语句翻译为‘1=1’,表示为忽略当前条件;若所述开始标记为第二预设字符,则直接将该语法语句翻译为‘1=2’,表示没有数据满足条件。
优选地,所述执行语句确定单元204,用于利用确定的执行语句替换与其对应的语法语句,确定所述sql查询语句对应的sql执行语句。
本发明的实施例的基于sql语言的语法语句的扩展系统200200与本发明的另一个实施例的基于sql语言的语法语句的扩展方法100相对应,在此不再赘述。
已经通过参考少量实施方式描述了本发明。然而,本领域技术人员所公知的,正如附带的专利权利要求所限定的,除了本发明以上公开的其他的实施例等同地落在本发明的范围内。
通常地,在权利要求中使用的所有术语都根据他们在技术领域的通常含义被解释,除非在其中被另外明确地定义。所有的参考“一个/所述/该[装置、组件等]”都被开放地解释为所述装置、组件等中的至少一个实例,除非另外明确地说明。这里公开的任何方法的步骤都没必要以公开的准确的顺序运行,除非明确地说明。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求保护范围之内。
1.一种基于sql语言的语法语句的扩展方法,其特征在于,所述方法包括:
获取基于预设的where条件语法编写规则编写的sql查询语句,并解析所述sql查询语句中每个语法语句的开始标记和每个语法语句中的传递参数的值;
对于任一个语法语句,当该语法语句中存在传递参数的值时,根据该语法语句中传递参数的值,基于预设的where语法语句解析规则对该语法语句进行解析和翻译,以确定该语法语句对应的执行语句;
对于任一个语法语句,当该语法语句中不存在传递参数的值时,根据该语法语句的开始标记,基于预设的where语法语句解析规则进行解析和翻译,以确定该语法语句对应的执行语句;
利用确定的执行语句替换与其对应的语法语句,确定所述sql查询语句对应的sql执行语句。
2.根据权利要求1所述的方法,其特征在于,所述预设的where条件语法编写规则,包括:
操作符in、notin、equal、unequal、between、between2、like和unlike的语法编写规则;以及
根据传递参数中的key值对应的数据是否存在使用,确定开始标记;其中,所述开始标记包括:第一预设字符和第二预设字符;若查询时没有传递参数中所需的key对应数据,则以第一预设字符作为开始标记;反之,以第二预设字符作为开始标记。
3.根据权利要求1所述的方法,其特征在于,所述当该语法语句中存在传递参数的值时,根据该语法语句中传递参数的值,基于预设的where语法语句解析规则对该语法语句进行解析和翻译,以确定该语法语句对应的执行语句,包括:
对equal和unequal语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个参数或第三个参数为key的数据,并根据第二个参数或第三个参数为key的数据进行翻译,以确定该语法语句对应的执行语句;
对in和notin语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个参数为key的数据,并当该数据为数组格式时,根据二个参数为key的数据和数组长度进行翻译,以确定该语法语句对应的执行语句;
对between和between2语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个和第三个参数为key对应的数据,并根据第二个参数或第三个参数为key的数据进行翻译,以确定该语法语句对应的执行语句;
对like和unlike语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个参数为key对应的数据和第三个参数,并根据第二个参数为key对应的数据和第三个参数进行翻译,以确定该语法语句对应的执行语句。
4.根据权利要求1所述的方法,其特征在于,所述当该语法语句中不存在传递参数的值时,根据该语法语句的开始标记,基于预设的where语法语句解析规则进行解析和翻译,以确定该语法语句对应的执行语句,包括:
当该语法语句中不存在传递参数的值时,确定该语法语句的开始标记,若所述开始标记为第一预设字符,则直接将该语法语句翻译为‘1=1’,表示为忽略当前条件;若所述开始标记为第二预设字符,则直接将该语法语句翻译为‘1=2’,表示没有数据满足条件。
5.根据权利要求2或4所述的方法,其特征在于,所述第一预设字符为‘$’;所述第二预设字符为‘#’。
6.一种基于sql语言的语法语句的扩展系统,其特征在于,所述系统包括:
语句解析单元,用于获取基于预设的where条件语法编写规则编写的sql查询语句,并解析所述sql查询语句中每个语法语句的开始标记和每个语法语句中的传递参数的值;
第一执行语句确定单元,用于对于任一个语法语句,当该语法语句中存在传递参数的值时,根据该语法语句中传递参数的值,基于预设的where语法语句解析规则对该语法语句进行解析和翻译,以确定该语法语句对应的执行语句;
第二执行语句确定单元,用于对于任一个语法语句,当该语法语句中不存在传递参数的值时,根据该语法语句的开始标记,基于预设的where语法语句解析规则进行解析和翻译,以确定该语法语句对应的执行语句;
执行语句确定单元,用于利用确定的执行语句替换与其对应的语法语句,确定所述sql查询语句对应的sql执行语句。
7.根据权利要求6所述的系统,其特征在于,所述预设的where条件语法编写规则,包括:
操作符in、notin、equal、unequal、between、between2、like和unlike的语法编写规则;以及
根据传递参数中的key值对应的数据是否存在使用,确定开始标记;其中,所述开始标记包括:第一预设字符和第二预设字符;若查询时没有传递参数中所需的key对应数据,则以第一预设字符作为开始标记;反之,以第二预设字符作为开始标记。
8.根据权利要求6所述的系统,其特征在于,所述第一执行语句确定单元,当该语法语句中存在传递参数的值时,根据该语法语句中传递参数的值,基于预设的where语法语句解析规则对该语法语句进行解析和翻译,以确定该语法语句对应的执行语句,包括:
对equal和unequal语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个参数或第三个参数为key的数据,并根据第二个参数或第三个参数为key的数据进行翻译,以确定该语法语句对应的执行语句;
对in和notin语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个参数为key的数据,并当该数据为数组格式时,根据二个参数为key的数据和数组长度进行翻译,以确定该语法语句对应的执行语句;
对between和between2语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个和第三个参数为key对应的数据,并根据第二个参数或第三个参数为key的数据进行翻译,以确定该语法语句对应的执行语句;
对like和unlike语法语句进行解析,当存在传递函数的值时,从传递参数中获取第二个参数为key对应的数据和第三个参数,并根据第二个参数为key对应的数据和第三个参数进行翻译,以确定该语法语句对应的执行语句。
9.根据权利要求6所述的系统,其特征在于,所述第二执行语句确定单元,当该语法语句中不存在传递参数的值时,根据该语法语句的开始标记,基于预设的where语法语句解析规则进行解析和翻译,以确定该语法语句对应的执行语句,包括:
当该语法语句中不存在传递参数的值时,确定该语法语句的开始标记,若所述开始标记为第一预设字符,则直接将该语法语句翻译为‘1=1’,表示为忽略当前条件;若所述开始标记为第二预设字符,则直接将该语法语句翻译为‘1=2’,表示没有数据满足条件。
10.根据权利要求7或9所述的系统,其特征在于,所述第一预设字符为‘$’;所述第二预设字符为‘#’。
技术总结