检查sql语句的方法及装置
技术领域:
:1.本发明涉及云计算
技术领域:
:,尤其涉及一种检查sql语句的方法及装置。
背景技术:
::2.本部分旨在为权利要求书中陈述的本发明实施例提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。3.在日常程序开发过程中,开发人员会写很多sql语句完成相应的功能。通常只能测试这些sql语句是否能够正常工作,但是没有一种好的方法能够检查出这些sql语句是否符合开发规范。4.目前检查sql语句是否符合开发规范常用的方案是通过人工检查。需人工按照规范,逐个检查sql语句。通常sql规范会有数十条、甚至上百条,代码中的sql语句也会有成百上千条,人工检查难度大,平时工作中不可能做到完全覆盖,费时费力,效率低,且容易遗漏。技术实现要素:5.本发明实施例提供一种检查sql语句的方法,用以高效准确地对sql语句的开发规范进行检查,该方法包括:6.获取所有待检查的sql语句;7.逐条解析待检查的sql语句,将每一条待检查的sql语句解析成一个语法树,获取所述语法树的各个部分;8.确定待检查的sql语句的类型;根据待检查的sql语句的类型,匹配出待检查的sql语句对应的策略检查器;9.利用待检查的sql语句对应的策略检查器,检查所述语法树的各个部分是否符合开发规范,得到sql语句的检查结果。10.本发明实施例还提供一种检查sql语句的装置,用以高效准确地对sql语句的开发规范进行检查,该装置包括:11.获取单元,用于获取所有待检查的sql语句;12.解析单元,用于逐条解析待检查的sql语句,将每一条待检查的sql语句解析成一个语法树,获取所述语法树的各个部分;13.匹配单元,用于确定待检查的sql语句的类型;根据待检查的sql语句的类型,匹配出待检查的sql语句对应的策略检查器;14.检查单元,用于利用待检查的sql语句对应的策略检查器,检查所述语法树的各个部分是否符合开发规范,得到sql语句的检查结果。15.本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述检查sql语句的方法。16.本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述检查sql语句的方法。17.本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现上述检查sql语句的方法。18.本发明实施例中,检查sql语句的方案,与现有技术中主要通过人工检查费时费力,效率低,且容易遗漏的技术方案相比,通过:获取所有待检查的sql语句;逐条解析待检查的sql语句,将每一条待检查的sql语句解析成一个语法树,获取所述语法树的各个部分;确定待检查的sql语句的类型;根据待检查的sql语句的类型,匹配出待检查的sql语句对应的策略检查器;利用待检查的sql语句对应的策略检查器,检查所述语法树的各个部分是否符合开发规范,得到sql语句的检查结果,可以高效准确地对sql语句的开发规范进行检查,保证了软件顺利上线。附图说明19.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:20.图1为本发明实施例中检查sql语句的方法的流程示意图;21.图2为本发明另一实施例中检查sql语句的方法的流程示意图;22.图3为本发明另一实施例中检查sql语句的方法的流程示意图;23.图4为本发明另一实施例中检查sql语句的方法的流程示意图;24.图5为本发明实施例中检查sql语句的装置的结构示意图;25.图6为本发明另一实施例中检查sql语句的装置的结构示意图;26.图7为本发明另一实施例中检查sql语句的装置的结构示意图;27.图8为本发明另一实施例中检查sql语句的装置的结构示意图。具体实施方式28.为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。29.目前市面上常见的软件只能检查sql语法错误,即sql是否能正常运行。但是在sql能够运行的基础上,却无法检查sql是否符合开发规范,即sql是否健康、可读性是否满足要求、是否可能引入性能问题等。本发明实施例旨在提供一种检查sql语句的方案,该方案可以快速检查出sql语句是否符合开发规范。下面对该检查sql语句的方案进行详细介绍。30.图1为本发明实施例中检查sql语句的方法的流程示意图,如图1所示,该方法包括如下步骤:31.步骤101:获取所有待检查的sql语句;32.步骤102:逐条解析待检查的sql语句,将每一条待检查的sql语句解析成一个语法树,获取所述语法树的各个部分;33.步骤103:确定待检查的sql语句的类型;根据待检查的sql语句的类型,匹配出待检查的sql语句对应的策略检查器;34.步骤104:利用待检查的sql语句对应的策略检查器,检查所述语法树的各个部分是否符合开发规范,得到sql语句的检查结果。35.本发明实施例提供的检查sql语句的方法,工作时:获取所有待检查的sql语句;逐条解析待检查的sql语句,将每一条待检查的sql语句解析成一个语法树,获取所述语法树的各个部分;确定待检查的sql语句的类型;根据待检查的sql语句的类型,匹配出待检查的sql语句对应的策略检查器;利用待检查的sql语句对应的策略检查器,检查所述语法树的各个部分是否符合开发规范,得到sql语句的检查结果。36.与现有技术中主要通过人工检查费时费力,效率低,且容易遗漏的技术方案相比,本发明实施例提供的检查sql语句的方法可以高效准确地对sql语句的开发规范进行检查,保证了软件顺利上线。下面结合图2至图4对该检查sql语句的方法进行详细介绍。37.本发明实施例通过编写一个sql检查工具(检查sql语句的方案),按照sql开发规范逐条编写检查程序(例如某企业有40条开发规范,则需要将40条规范按照检查工具的标准实现为程序代码)。使用这个工具,检查所有的sql语句,生成检查报告。下面进行详细介绍。38.首先,介绍,预先配置策略检查器的过程。39.根据企业的sql开发规范,并根据规范,实现相应的检查代码,即检查器。如下表1所示:40.序号规则1sql关键字大写2insert语句必须要插入的字段名称3数据行删除/更新使用delete/update时,必须带上where子句4禁止在update语句中,将“,”写成and5如果需要清除全表数据,建议使用truncatetable删除所有的行6避免使用replace。先采用select判断是否存在记录,然后再考虑insert或update7如无必要锁定数据,则应避免使用forupdate8禁止使用select*查询9where条件中的过滤条件字段上严禁使用任何函数,包括数据类型转换函数10多表关联查询时,避免使用非索引字段作为关联条件11禁止使用orderbyrand()12进行模糊查询时,避免使用左模糊或者全模糊匹配。根据最左前缀原则合理安排查询条件13避免使用count(*)作为查询字段14相同字段的or条件大于3个,建议使用in代替15不同字段的or条件大于3个,建议使用使用unionall代替16尽量避免在select子句中使用子查询,替换为连接查询17考虑使用in替代exists做嵌套查询18必须进行表关联查询时,控制关联表的个数不超过两个19外连接的sql语句,建议一律写成leftjoin(左侧为主表),而不要使用rightjoin20对min(),max()等聚合函数,建议利用数据的有序性配合limt1将sql等价转化21使用where子句代替having子句22分页查询语句全部都需要带有排序条件,除非业务方明确要求不要使用任何排序来随机展示数据41.表142.在配置策略检查器的过程中,需要了解sql语法及语义格式,能够解析各式各样的sql语句,并把开发规范实现为程序(检查策略),去检查sql语句是否符合规范。43.其次,介绍应用策略检查器实际检查sql语句的步骤,即上述步骤101至步骤104。44.在上述步骤101中,收集项目中所有的sql语句,可以是人工收集,也可以是通过预先配置程序收集,收集好的sql按照某个具体的格式写入某个文档(如txt文件)即可。45.在上述步骤102中,逐条解析sql语句,将每一条sql语句解析成一个语法树。并获取到语法树的各个部分,如查询项、关联表、where条件、groupby条件等。46.在上述步骤103中,根据sql的类型,匹配规则检查器。如select、update、delete等分别有不同的检查器。47.在上述步骤104中,根据规则(策略,如上表1所示),检查语法树的各个部分,并生成检查报告,将检查后的结果展示出来。例如上图中规则8“必须写明查询条件,不能出现select*”,这个重点检查查询语句和子查询的查询项部分。48.再次,介绍进一步优选的步骤。49.在一个实施例中,如图2所示,上述检查sql语句的方法还可以包括步骤105:根据所述sql语句的检查结果,生成sql语句的检查报告。50.具体实施时,根据所述sql语句的检查结果,生成sql语句的检查报告,展示给用户,例如开发人员,便于用户快速发现sql语句的问题,提高了用户体验。51.在一个实施例中,如图3所示,上述检查sql语句的方法还可以包括如下步骤:52.步骤106:将所述sql语句的检查报告处理为预设格式的sql语句检查报告;53.步骤107:将所述预设格式的sql语句检查报告发送至预设开发人员的终端。54.具体实施时,将检查报告输出为特定样式(例如html网页或者json格式的数据),供开发人员查看,便于快速发现sql语句的问题,提高了用户体验。55.在一个实施例中,所述预设格式的sql语句检查报告可以为html网页格式、json格式、邮件格式或excel格式的sql语句检查报告。56.具体实施时,sql语句检查报告格式灵活多样,供不同需求和习惯的用户灵活选择,进一步提高了用户的体验。57.在一个实施例中,如图4所示,上述检查sql语句的方法还可以包括步骤108:在检查到所述语法树的预设部分不符合开发规范,且不符合开发规范的程度大于预设值时,发出警报提示至预设管理人员的终端。58.具体实施时,在检查到所述语法树的预设部分不符合开发规范,且不符合开发规范的程度大于预设值(该sql语句开发不规范的问题很严重,例如引入性能问题,影响后续软件产品上线)时,及时发出警报提示至预设管理人员的终端,使得sql语句开发不规范的问题得到尽快的解决。59.综上,本发明实施例中提供的检查sql语句的方法可以高效准确地对sql语句的开发规范进行检查,可以在几十秒内完成所有sql规范的检查,速度快、不遗漏、记录完整。60.本技术技术方案中对数据的获取、存储、使用、处理等均符合国家法律法规的相关规定。61.本发明实施例中还提供了一种检查sql语句的装置,如下面的实施例所述。由于该装置解决问题的原理与检查sql语句的方法相似,因此该装置的实施可以参见检查sql语句的方法的实施,重复之处不再赘述。62.图5为本发明实施例中检查sql语句的装置的结构示意图,如图5所示,该装置包括:63.获取单元01,用于获取所有待检查的sql语句;64.解析单元02,用于逐条解析待检查的sql语句,将每一条待检查的sql语句解析成一个语法树,获取所述语法树的各个部分;65.匹配单元03,用于确定待检查的sql语句的类型;根据待检查的sql语句的类型,匹配出待检查的sql语句对应的策略检查器;66.检查单元04,用于利用待检查的sql语句对应的策略检查器,检查所述语法树的各个部分是否符合开发规范,得到sql语句的检查结果。67.在一个实施例中,如图6所示,上述检查sql语句的装置还可以包括:报告生成单元05,用于根据所述sql语句的检查结果,生成sql语句的检查报告。68.在一个实施例中,如图7所示,上述检查sql语句的装置还可以包括:69.格式处理单元06,用于将所述sql语句的检查报告处理为预设格式的sql语句检查报告;70.发送单元07,用于将所述预设格式的sql语句检查报告发送至预设开发人员的终端。71.在一个实施例中,所述预设格式的sql语句检查报告为html网页格式、json格式、邮件格式或excel格式的sql语句检查报告。72.在一个实施例中,如图8所示,上述检查sql语句的装置还可以包括:预警单元08,用于在检查到所述语法树的预设部分不符合开发规范,且不符合开发规范的程度大于预设值时,发出警报提示至预设管理人员的终端。73.本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述检查sql语句的方法。74.本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述检查sql语句的方法。75.本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现上述检查sql语句的方法。76.本发明实施例中,检查sql语句的方案,与现有技术中主要通过人工检查费时费力,效率低,且容易遗漏的技术方案相比,通过:获取所有待检查的sql语句;逐条解析待检查的sql语句,将每一条待检查的sql语句解析成一个语法树,获取所述语法树的各个部分;确定待检查的sql语句的类型;根据待检查的sql语句的类型,匹配出待检查的sql语句对应的策略检查器;利用待检查的sql语句对应的策略检查器,检查所述语法树的各个部分是否符合开发规范,得到sql语句的检查结果。本发明可以高效准确地对sql语句的开发规范进行检查,保证了软件顺利上线。77.本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。78.本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。79.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。80.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。81.以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
技术特征:1.一种检查sql语句的方法,其特征在于,包括:获取所有待检查的sql语句;逐条解析待检查的sql语句,将每一条待检查的sql语句解析成一个语法树,获取所述语法树的各个部分;确定待检查的sql语句的类型;根据待检查的sql语句的类型,匹配出待检查的sql语句对应的策略检查器;利用待检查的sql语句对应的策略检查器,检查所述语法树的各个部分是否符合开发规范,得到sql语句的检查结果。2.如权利要求1所述的检查sql语句的方法,其特征在于,还包括:根据所述sql语句的检查结果,生成sql语句的检查报告。3.如权利要求2所述的检查sql语句的方法,其特征在于,还包括:将所述sql语句的检查报告处理为预设格式的sql语句检查报告;将所述预设格式的sql语句检查报告发送至预设开发人员的终端。4.如权利要求3所述的检查sql语句的方法,其特征在于,所述预设格式的sql语句检查报告为html网页格式、json格式、邮件格式或excel格式的sql语句检查报告。5.如权利要求1所述的检查sql语句的方法,其特征在于,还包括:在检查到所述语法树的预设部分不符合开发规范,且不符合开发规范的程度大于预设值时,发出警报提示至预设管理人员的终端。6.一种检查sql语句的装置,其特征在于,包括:获取单元,用于获取所有待检查的sql语句;解析单元,用于逐条解析待检查的sql语句,将每一条待检查的sql语句解析成一个语法树,获取所述语法树的各个部分;匹配单元,用于确定待检查的sql语句的类型;根据待检查的sql语句的类型,匹配出待检查的sql语句对应的策略检查器;检查单元,用于利用待检查的sql语句对应的策略检查器,检查所述语法树的各个部分是否符合开发规范,得到sql语句的检查结果。7.如权利要求6所述的检查sql语句的装置,其特征在于,还包括:报告生成单元,用于根据所述sql语句的检查结果,生成sql语句的检查报告。8.如权利要求7所述的检查sql语句的装置,其特征在于,还包括:格式处理单元,用于将所述sql语句的检查报告处理为预设格式的sql语句检查报告;发送单元,用于将所述预设格式的sql语句检查报告发送至预设开发人员的终端。9.如权利要求8所述的检查sql语句的装置,其特征在于,所述预设格式的sql语句检查报告为html网页格式、json格式、邮件格式或excel格式的sql语句检查报告。10.如权利要求6所述的检查sql语句的装置,其特征在于,还包括:预警单元,用于在检查到所述语法树的预设部分不符合开发规范,且不符合开发规范的程度大于预设值时,发出警报提示至预设管理人员的终端。11.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至5任一所述方法。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至5任一所述方法。13.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现权利要求1至5任一所述方法。
技术总结本发明公开了一种检查SQL语句的方法及装置,涉及云计算技术领域,其中该方法包括:获取所有待检查的SQL语句;逐条解析待检查的SQL语句,将每一条待检查的SQL语句解析成一个语法树,获取所述语法树的各个部分;确定待检查的SQL语句的类型;根据待检查的SQL语句的类型,匹配出待检查的SQL语句对应的策略检查器;利用待检查的SQL语句对应的策略检查器,检查所述语法树的各个部分是否符合开发规范,得到SQL语句的检查结果。本发明可以高效准确地对SQL语句的开发规范进行检查,保证了软件顺利上线。上线。上线。
技术研发人员:张顺 郑泽奇
受保护的技术使用者:中国银行股份有限公司
技术研发日:2022.03.30
技术公布日:2022/7/5