[发明专利]一种查询语句解析与再处理的方法和装置在审
申请号: | 201310692598.0 | 申请日: | 2013-12-17 |
公开(公告)号: | CN104714974A | 公开(公告)日: | 2015-06-17 |
发明(设计)人: | 范钢;偶瑞军 | 申请(专利权)人: | 航天信息股份有限公司 |
主分类号: | G06F17/30 | 分类号: | G06F17/30;G06F9/44 |
代理公司: | 北京科龙寰宇知识产权代理有限责任公司 11139 | 代理人: | 孙皓晨 |
地址: | 100097 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 查询 语句 解析 处理 方法 装置 | ||
技术领域
本发明涉及数据库查询领域,具体而言,涉及一种查询语句解析与再处理的方法和装置。
背景技术
目前市面上各个大型web(网络)系统、大型信息化管理系统都普遍存在大型数据库查询的需求,过去在进行数据库查询时通常都是写死在各个功能模块中。但随着软件技术的发展,越来越多的软件系统都尝试采用平台式开发,以期降低整体研发成本与研发周期。在这样一个整体背景下,各种通用查询方案孕育而生。在所有通用查询方案中几乎都无法绕过一个重要的技术课题,那就是对查询语句的解析,从而实现对查询语句的分页、排序、分组功能的处理等等。
在这样一个背景下,各大软件厂商都提出了各自不同的对查询语句的解析与处理的方案与设计,但这些方案与设计普遍存在两个方面的问题:
1)过程过于复杂与庞大。大多数方案都尝试对查询语句的完全解析,而由于查询语句自身的复杂与多变,完全解析需要考虑的情况实在太多,使得这些解决方案陷入了无法穷解的尴尬境地。查询语句的解析与处理真的需要对原有查询语句进行完全解析吗?处理过程过于复杂必然造成设计成本的增加、出错风险的加大与维护难度的激增。如果客户需求并不需要这种完全的解析就可以解决问题,那么这样的设计必然造成一种浪费。因此本方法本着务实与精炼的思想,另辟蹊径提出了新的设计思路。
2)处理过于简单而未考虑性能。许多诸如分页、排序、分组等方案,采用了一些过于简单、易于实现的方式。但这些方式在进行数据查询往往会出现效率低下的问题,特别在面对超大数据库的状况下。因此本方法在许多地方的设计更加着眼于在面对超大数据库的性能问题,并在实际应用中获得了较好的效果。
3)未着眼于开发人员的使用。这里对查询语句的解析与处理,其目的就是要为开发人员提供通用的开发平台,提供通用的查询功能。因此,该功能针对的客户群是开发人员,在设计上应当更多地考虑开发人员使用的便捷、易用与灵活。因此本方法充分考虑了这些方面的问题,并在实际项目中得到了广泛的应用。
发明内容
本发明提供一种查询语句解析与再处理的方法和装置,通过对查询语句的处理,一方面可以方便开发人员以更加灵活便捷地方式设计查询功能,另一方面为原始的查询语句提供了高效分页查询、动态排序与分组等功能,为大型管理系统设计通用查询平台创造了条件。
为达到上述目的,本发明提供了一种查询语句解析与再处理的方法,包括以下步骤:
定义一个类,所述类包含6项属性,分别对应标准查询语句的6个查询子句;
根据用户提供的原始查询语句和查询参数集,将所述原始查询语句的主查询语句解析为6个查询子句,包括select、from、where、group by、having、order by,并用查询对象对应的6个属性分别将得到的查询子句进行存储,其中所述原查询语句包含至少一个查询子句,对于所述原查询语句不包含的查询子句,所述类对应的属性为空;
在查询对象中,分别对解析后的查询子句进行分页、分组、排序至少一项的处理。
根据所述处理后,重新拼装进而形成新的查询语句及其查询参数,执行查询操作。
进一步地,所述标准查询语句的6个查询子句分别为select、from、where、group by、having、order by,对应于所述类中的6项属性分别为SqlProxy.select、SqlProxy.from、SqlProxy.where、SqlProxy.groupBy、SqlProxy.having、SqlProxy.orderBy,对所述原查询语句的解析过程如下:
找出没有包含在任何括号中的以下关键字:select、from、where、group by、having、order by;
将在select与from之间的select子句存储在SqlProxy.select属性中;
from子句位于from与where之间,在检查时如果没有where关键字则检查group by关键字,如果也没有则检查order by关键字,如果还没有则从from关键字一直检查至字符串结束,将from子句存储在SqlProxy.from属性中;
如果有where关键字,在where与group by之间的是where子句,如果没有group by关键字则在where与order by之间,否则一直包含到字符串结束,将where子句存储在SqlProxy.where属性中;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于航天信息股份有限公司;,未经航天信息股份有限公司;许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310692598.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种动态的查询语句处理方法及其装置
- 下一篇:一种基于降维的二维插值方法