一种能够保证SQL完整性且能动态变动的方法技术

技术编号:18658193 阅读:30 留言:0更新日期:2018-08-11 14:30
本发明专利技术涉及数据库数据处理技术领域,具体涉及一种能够保证SQL完整性且能动态变动的方法;包括以下步骤:根据SQL多级关键字将SQL解析成语法树对象并缓存起来;根据传入参数关键字删除或保留相应的节点或者分支生成新的语法树;根据实际运行的数据库和新的语法树生成新的SQL语句;到数据库里执行SQL语句;解决了目前一些ORM框架通过对象关系映射等技术可以兼容多种数据库,但是存在着灵活性问题,ORM灵活性较差,不能方便的拼接SQL的问题。

A method that can ensure SQL integrity and dynamic change.

The invention relates to the technical field of database data processing, in particular to a method capable of guaranteeing SQL integrity and dynamically changing, including the following steps: parsing SQL into syntax tree objects according to SQL multilevel keywords and caching them; deleting or retaining corresponding nodes or branches to generate new ones according to the keywords of the incoming parameters Syntax tree; generate new SQL statements according to the actual running database and new syntax tree; execute SQL statements in the database; solve the problem that some ORM frameworks can be compatible with a variety of databases through object-relational mapping technology, but there are flexibility problems, ORM flexibility is poor, not easy to splice SQL.

【技术实现步骤摘要】
一种能够保证SQL完整性且能动态变动的方法
本专利技术涉及数据库数据处理
,具体涉及一种能够保证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)根据实本文档来自技高网...

【技术保护点】
1.一种能够保证SQL完整性且能动态变动的方法,其特征在于,包括以下步骤:1)根据SQL多级关键字将SQL解析成语法树对象并缓存起来;2)根据传入参数关键字删除或保留相应的节点或者分支生成新的语法树;3)根据实际运行的数据库和新的语法树生成新的SQL语句;4)到数据库里执行SQL语句。

【技术特征摘要】
1.一种能够保证SQL完整性且能动态变动的方法,其特征在于,包括以下步骤:1)根据SQL多级关键字将SQL解析成语法树对象并缓存起来;2)根据传入参数关键字删除或保留相应的节点或者分支生成新的语法树;3)根据实际运行的数据库和新的语法树生成新的SQL语句;4)到数据库里执行SQL语句。2.根据权利要求1所述的一种能够保证SQL完整性且能动态变动的方法,其特征在于:根据SQL多级关键字将SQL解析成语法树之前,格式化SQL模板,去掉多余换行符和多余空格和注释。3.根据权利要求1或2所述的一种能够保证SQL完整性且能动态变动的方法,其特征在于:所述SQL多级关键字包括:“select”、“from”、“insert”、“update”、“innerjoin”、“leftjoin”、“>”、“<”、“like”、“and”和“or”中的一种或多种。4.根据权利要求1或2所述的一种能够保证SQL完整性且能动态变动的方法,其特征在于:所述根据SQL多级关键字将SQL解析成语法树,具体是:先将SQL语句进行格式检查,去除多余的空格和回车换行等字符,然后将字符串按照空格进行切分,然后判断切分的每一段是否是对应的关键字,如果是则把该段作为一个树的节点,下一个段如果是关键字做作为树...

【专利技术属性】
技术研发人员:甄建廷
申请(专利权)人:弘成科技发展有限公司
类型:发明
国别省市:北京,11

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

1