一种能够保证SQL完整性且能动态变动的方法与流程

文档序号:15144488发布日期:2018-08-10 20:17阅读:395来源:国知局

本发明涉及数据库数据处理技术领域,具体涉及一种能够保证sql完整性且能动态变动的方法。



背景技术:

sql是目前很流行的一种关系数据库操作程序语言,在it行业中无论大小项目中基本都会用到它。在软件开发中为了实现一个复杂查询,往往会用到动态拼接sql才能满足需求,拼接sql中往往还要兼容不同数据库的差异。目前一些orm框架通过对象关系映射等技术可以兼容多种数据库,但是存在着灵活性问题,orm灵活性较差,不能方便的拼接sql。



技术实现要素:

本发明的目的在于提供一种能够保证sql完整性且能动态变动的方法,解决了目前一些orm框架通过对象关系映射等技术可以兼容多种数据库,但是存在着灵活性问题,orm灵活性较差,不能方便的拼接sql的问题。

为解决上述的技术问题,本发明采用以下技术方案:

一种能够保证sql完整性且能动态变动的方法,包括以下步骤:

1)根据sql多级关键字将sql解析成语法树对象并缓存起来;

2)根据传入参数关键字删除或保留相应的节点或者分支生成新的语法树;

3)根据实际运行的数据库和新的语法树生成新的sql语句;

4)到数据库里执行sql语句。

进一步的,所述根据sql多级关键字将sql解析成语法树之前,格式化sql模板,去掉多余换行符和多余空格和注释。

进一步的,所述sql多级关键字包括:“select”、“from”、“insert”、“update”、“innerjoin”、“leftjoin”、“>”、“<”、“like”、“and”和“or”中的一种或多种。

进一步的,所述根据sql多级关键字将sql解析成语法树,具体是:

先将sql语句进行格式检查,去除多余的空格和回车换行等字符,然后将字符串按照空格进行切分,然后判断切分的每一段是否是对应的关键字,如果是则把该段作为一个树的节点,下一个段如果是关键字做作为树的下一个节点,如果不是则该段作为当前节点的子节点,然后子节点再进行二级关键字切分,切分逻辑同上,最终切分成一个完整的sql语法树。

进一步的,所述传入参数关键字包括:“=”、“like”、“>”和“<”中的一种或多种。

进一步的,所述根据传入参数关键字删除或保留相应的节点或者分支生成新的语法树,具体是:

根据参数关键字“=”、“like”、“>”、“<”等找到对应的树节点,这些节点的子节点的左子节点和传入的参数进行比较,如果包含着传入的参数中则为合法节点,如果不包含着参数中则为非法节点,将非法节点进行删除。

进一步的,所述的一种能够保证sql完整性且能动态变动的方法,还包括在根据传入参数关键字删除或保留相应的节点之后,根据连接关键字“and”或者“or”对保留下来的节点进行递归有效性检查,如果不存在右子树则将该节点删除。

进一步的,所述根据新的语法树生成新的sql语句是将语法树按照从上到下,从左到右的顺序进行字符串拼接而成的。

与现有技术相比,本发明的有益效果是:本发明将在一种能够保证sql完整性且能动态变动的方法上,通过将sql解析成语法树对象并缓存起来,然后根据实际传入的条件参数对语法树的节点进行筛选,从而形成新的语法树,针对不同的数据库用户可以直接解析新生成的语法树,从而生成对应的sql语句,从而达到在不同数据库中都便于sql拼接的目的。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

实施例1:

一种能够保证sql完整性且能动态变动的方法,包括以下步骤:

1)根据sql多级关键字将sql解析成语法树对象并缓存起来;

2)根据传入参数关键字删除或保留相应的节点或者分支生成新的语法树;

3)根据实际运行的数据库和新的语法树生成新的sql语句;

4)到数据库里执行sql语句。

通过将sql解析成语法树对象并缓存起来,然后根据实际传入的条件参数对语法树的节点进行筛选,从而形成新的语法树,针对不同的数据库用户可以直接解析新生成的语法树,从而生成对应的sql语句,从而达到在不同数据库中都便于sql拼接的目的。

实施例2:

一种能够保证sql完整性且能动态变动的方法,包括以下步骤:

1)根据sql多级关键字将sql解析成语法树对象并缓存起来;

2)根据传入参数关键字删除或保留相应的节点或者分支生成新的语法树;

3)根据实际运行的数据库和新的语法树生成新的sql语句;

4)到数据库里执行sql语句。

根据sql多级关键字将sql解析成语法树之前,格式化sql模板,去掉多余换行符和多余空格和注释。在sql语句中如果存在两个以上的空格会导致数据库无法正确识别sql语句。如果输入的原sql中含有多余换行符和多余空格和注释,格式化sql模板将sql语句中的多余换行符和多余空格和注释去掉,从而提升了一种能够保证sql完整性且能动态变动的方法的容错率。

实施例3:

一种能够保证sql完整性且能动态变动的方法,包括以下步骤:

1)根据sql多级关键字将sql解析成语法树对象并缓存起来;

2)根据传入参数关键字删除或保留相应的节点或者分支生成新的语法树;

3)根据实际运行的数据库和新的语法树生成新的sql语句;

4)到数据库里执行sql语句。

所述sql多级关键字包括:“select”、“from”、“insert”、“update”、“innerjoin”、“leftjoin”、“>”、“<”、“like”、“and”和“or”中的一种或多种。一种能够保证sql完整性且能动态变动的方法可以处理“select”、“from”、“insert”、“update”、“innerjoin”、“leftjoin”、“>”、“<”、“like”、“and”和“or”等关键词,从而使得一种能够保证sql完整性且能动态变动的方法可以处理数据库中与“增加操作”、“删除操作”、“修改操作”、“查询操作”相关的所有语句。

实施例4:

一种能够保证sql完整性且能动态变动的方法,包括以下步骤:

1)根据sql多级关键字将sql解析成语法树对象并缓存起来;

2)根据传入参数关键字删除或保留相应的节点或者分支生成新的语法树;

3)根据实际运行的数据库和新的语法树生成新的sql语句;

4)到数据库里执行sql语句。

所述根据sql多级关键字将sql解析成语法树,具体是:

先将sql语句进行格式检查,去除多余的空格和回车换行等字符,然后将字符串按照空格进行切分,然后判断切分的每一段是否是对应的关键字,如果是则把该段作为一个树的节点,下一个段如果是关键字做作为树的下一个节点,如果不是则该段作为当前节点的子节点,然后子节点再进行二级关键字切分,切分逻辑同上,最终切分成一个完整的sql语法树。这种语法树的切分顺序,可以对sql中的多级关键字按顺序逐个进行切分,从而达到防止sql中的关键字在解析过程中漏检的目的。

实施例5

一种能够保证sql完整性且能动态变动的方法,包括以下步骤:

1)根据sql多级关键字将sql解析成语法树对象并缓存起来;

2)根据传入参数关键字删除或保留相应的节点或者分支生成新的语法树;

3)根据实际运行的数据库和新的语法树生成新的sql语句;

4)到数据库里执行sql语句。

所述传入参数关键字包括:“=”、“like”、“>”和“<”中的一种或多种。从而使一种能够保证sql完整性且能动态变动的方法可以处理与判断条件为“=”、“like”、“>”和“<”中的一种或多种的sql语句。使得该方法可以解决筛选条件为“等于”、“类似于”、“大于”、“小于”中的一种或多种的实际问题。

实施例6:

一种能够保证sql完整性且能动态变动的方法,包括以下步骤:

1)根据sql多级关键字将sql解析成语法树对象并缓存起来;

2)根据传入参数关键字删除或保留相应的节点或者分支生成新的语法树;

3)根据实际运行的数据库和新的语法树生成新的sql语句;

4)到数据库里执行sql语句。

所述根据传入参数关键字删除或保留相应的节点或者分支生成新的语法树,具体是:

根据参数关键字“=”、“like”、“>”、“<”找到对应的树节点,这些节点的子节点的左子节点和传入的参数进行比较,如果包含着传入的参数中则为合法节点,如果不包含着参数中则为非法节点,将非法节点进行删除。然后根据连接关键字(and、or)等进行递归有效性检查如果不存在右子树则将该节点删除。对生成语法树的节点进行检查,删除非法节点,可以防止解析出的sql语句在运行中报错,还能减少计算机的存储空间浪费。

实施例7:

一种能够保证sql完整性且能动态变动的方法,包括以下步骤:

1)根据sql多级关键字将sql解析成语法树对象并缓存起来;

2)根据传入参数关键字删除或保留相应的节点或者分支生成新的语法树;

3)根据实际运行的数据库和新的语法树生成新的sql语句;

4)到数据库里执行sql语句。

其步骤还包括在根据传入参数关键字删除或保留相应的节点之后,根据连接关键字“and”或者“or”对保留下来的节点进行递归有效性检查,如果不存在右子树则将该节点删除。递归有效性检查可以删除语法树中无效的子节点,有无又子树代表了and或者or后面还有没有条件,如果没有右子树该节点还保留and或者or等关键字会报语法错误。例如“select*fromuserwherename=’张三’and”这样的语法是错误,递归有效性检查可以把这样的无效and去掉,从而达到防止解析出的sql语句在运行中报错的目的。

实施例8:

一种能够保证sql完整性且能动态变动的方法,包括以下步骤:

1)根据sql多级关键字将sql解析成语法树对象并缓存起来;

2)根据传入参数关键字删除或保留相应的节点或者分支生成新的语法树;

3)根据实际运行的数据库和新的语法树生成新的sql语句;

4)到数据库里执行sql语句。

所述根据新的语法树生成新的sql语句是将语法树按照从上到下,从左到右的顺序进行字符串拼接而成的。按照该顺序对新的语法树进行解析,可以防止生成的sql语句发生关键字顺序错误或者关键字遗失的问题。

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