程序语句处理方法、装置、计算机设备和计算机存储介质与流程

文档序号:19284416发布日期:2019-11-29 23:21阅读:224来源:国知局
程序语句处理方法、装置、计算机设备和计算机存储介质与流程

本申请涉及计算机技术领域,特别是涉及一种程序语句处理方法、装置、计算机设备和计算机存储介质。



背景技术:

随着计算机技术的发展,程序越来越完善,因此,每个程序中的语句数量也越来越多。当语句出现冗余时,会出现反复调用的情况。目前的程序语句处理方法,存在处理效率低的问题。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种能够提高程序语句处理效率的程序语句处理方法、装置、计算机设备和计算机存储介质。

一种程序语句处理方法,方法包括:获取程序语句;确定程序语句中的重复语句;当重复语句为用于查询的第一语句时,获取第一语句对应的查询结果;缓存查询结果;当检测到含有与第一语句中查询字段相同的目标程序语句时,根据目标程序语句从缓存的查询结果中查询对应的目标结果。

在其中一个实施例中,当重复语句为用于查询的第一语句时,获取第一语句对应的查询结果,包括:当重复语句为用于查询的第一语句,且重复语句中的参数不发生变化时,获取第一语句对应的查询结果。

在其中一个实施例中,当重复语句为用于查询的第一语句时,获取第一语句对应的查询结果,包括:当重复语句为用于查询的第一语句,且重复语句中的参数发生变化,且重复语句不在循环中时,获取第一语句对应的查询结果。根据目标程序语句从缓存的查询结果中查询对应的目标结果,包括:根据目标程序语句中的查询字段以及对应的参数从缓存的查询结果中查询对应的目标结果。

在其中一个实施例中,当重复语句为用于查询的第一语句时,获取第一语句对应的查询结果,包括:当重复语句为用于查询的第一语句,且重复语句中的参数发生变化,且重复语句在循环中时,执行重复语句对应的循环;当循环执行完毕时,得到循环结果;根据循环结果获取第一语句对应的查询结果。

在其中一个实施例中,检测重复语句在循环中的方式,包括:获取程序语句中的循环开始标记以及对应的循环结束标记;当重复语句为循环开始标记以及对应的循环结束标记之间的语句时,确定重复语句在循环中。

在其中一个实施例中,获取第一语句对应的查询结果,包括:获取第一语句对应的查询结果的信息量;当查询结果的信息量小于或等于信息量阈值时,获取查询结果。

在其中一个实施例中,确定程序语句中的重复语句,包括:当程序语句的执行次数大于预设执行次数时,通过调用至少两次程序统计程序语句的重复比例;当重复比例大于预设比例时,确定程序语句为重复语句。

在其中一个实施例中,该程序语句处理方法还包括:当重复语句为用于更新的第二语句,且第二语句在循环中时,执行第二语句对应的循环;当执行第二语句对应的循环达到预设循环次数时,更新第二语句对应的数据库。

一种程序语句处理装置,所述装置包括:

第一获取模块,用于获取程序语句;

确定模块,用于确定程序语句中的重复语句;

第二获取模块,用于当重复语句为用于查询的第一语句时,获取第一语句对应的查询结果;

缓存模块,用于缓存查询结果;

查询模块,用于当检测到含有与第一语句中查询字段相同的目标程序语句时,根据目标程序语句从缓存的查询结果中查询对应的目标结果。

一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:获取程序语句;确定程序语句中的重复语句;当重复语句为用于查询的第一语句时,获取第一语句对应的查询结果;缓存查询结果;当检测到含有与第一语句中查询字段相同的目标程序语句时,根据目标程序语句从缓存的查询结果中查询对应的目标结果。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:获取程序语句;确定程序语句中的重复语句;当重复语句为用于查询的第一语句时,获取第一语句对应的查询结果;缓存查询结果;当检测到含有与第一语句中查询字段相同的目标程序语句时,根据目标程序语句从缓存的查询结果中查询对应的目标结果。

上述程序语句处理方法、装置、计算机设备和存储介质,通过获取程序语句,确定程序语句中的重复语句,能得到程序语句中的冗余代码;当重复语句为用于查询的第一语句时,获取第一语句对应的查询结果,缓存查询结果,当检测到含有与第一语句中查询字段相同的目标程序语句时,根据目标程序语句从缓存的查询结果中查询对应的目标结果,则当遇到程序中的重复语句时,不需要遍历整个数据库或者文件路径等,只需要查询一次,后续可直接从缓存中得到结果,优化该程序,提高程序语句的处理效率。

附图说明

图1为一个实施例中程序语句处理方法的应用环境图;

图2为一个实施例中程序语句处理方法的流程示意图;

图3为一个实施例中确定重复语句的流程示意图;

图4为另一个实施例中程序语句处理方法的流程示意图;

图5为一个实施例中程序语句处理装置的结构框图;

图6为一个实施例中计算机设备的内部结构图。

具体实施方式

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

本申请实施例中提供的程序语句方法,可以应用于如图1的计算机设备中。该计算机设备可以为终端或服务器。其中,终端可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。

在一个实施例中,如图2所示,提供了一种程序语句处理方法,以该方法应用于图1的计算机设备为例进行说明,包括以下步骤:

步骤202,获取程序语句。

其中,程序语句是指用程序语言写成的语句。程序语言例如可以是c语言、c++或者sql(structuredquerylanguage,结构化查询语言)等不限于此。那么程序语句可以是c语言语句、c++语句或者sql语句等不限于此。程序语句可由数字、字母、符号中的一种或多种组成。

具体地,计算机设备从第三方设备或者该计算机设备中获取某一程序中的所有程序语句。

步骤204,确定程序语句中的重复语句。

其中,重复语句是指在该程序中重复出现的语句。重复语句的数量不限。

具体地,计算机设备遍历该程序,确定所有程序语句中重复出现的语句。

本实施例中,计算机设备遍历一次程序,当检测到程序语句中存在执行次数大于预设执行次数时,确定该程序语句为重复语句。

例如,循环1:(循环10次)

标记(循环1开始)

select*fromid=4

标记(循环1结束)

那么,select*fromid=4循环了10次,该语句可为重复语句。

本实施例中,计算机设备遍历一次程序,存储或标记程序语句中存在执行次数大于预设执行次数的程序语句。或者,计算机设备调用至少两次该程序,统计该程序语句的重复次数与调用次数的重复比例,当重复比例大于预设比例时,确定该程序语句为重复语句。

步骤206,当重复语句为用于查询的第一语句时,获取第一语句对应的查询结果。

其中,用于查询的第一语句例如可以是用于从数据库中查询内容的第一语句,或者从其他文件路径中查询内容的第一语句,或者通过网络从网上查询内容的第一语句。用于查询的语句中可存在标志字符串,例如“select”等不限于此。

具体地,当该重复语句为用于查询的第一语句时,计算机设备根据该第一语句查询得到对应的查询结果。

步骤208,缓存该查询结果。

其中,缓存是指可以进行高速数据交换的存储器。

具体地,计算机设备可直接缓存该查询结果。

本实施例中,计算机设备获取该查询结果的信息量。当该查询结果的信息量小于或等于预设信息量时,缓存该查询结果。当该查询结果的信息量大于预设信息量时,发出告警信息。

步骤210,当检测到含有与第一语句中查询字段相同的目标程序语句时,根据目标程序语句从缓存的查询结果中查询对应的目标结果。

其中,用于查询的第一语句中可包括查询字段和参数。查询字段可以是在第一语句中具有查询功能的内容。参数是指第一语句中的数据常量或变量。参数在给定条件下能取固定值。例如,参数可以为1。或者参数为变量i,i=i+1等不限于此。目标程序语句是与第一语句中的查询字段相同的语句。查询字段相同的目标程序语句可包括查询字段和参数均相同的程序语句,或者查询字段相同但参数不相同的程序语句。

具体地,查询字段相同说明查询的内容来源相同。当检测到含有与该第一语句中查询字段相同的目标程序语句时,根据目标程序语句从缓存的查询结果中查询对应的目标结果。

本实施例中,当计算机设备检测到含有与第一语句中查询字段相同且参数相同的目标程序语句时,根据目标程序语句直接获取该缓存的查询结果。

本实施例中,当计算机设备检测到含有与该第一语句中查询字段相同但参数不同的目标程序语句时,根据目标程序语句从缓存的查询结果中查询对应的目标结果。其中,当该参数中包含正则表达式时,根据目标程序语句中的正则表达式从缓存的查询结果中查询对应的目标结果。

本实施例中,当根据目标语句无法从缓存的查询结果中查询到对应的目标结果时,根据目标语句的查询字段从源路径中查询到该目标结果。

例如,第一语句为“selectfrom表1wherenameindifilterarray”,其中,idfilterarray是参数,查询字段为“selectfrom表1wherename”或者“selectfrom表1wherenamein”。

将根据第一语句查询得到的结果记录在result中并缓存。

目标程序语句为“selectfrom表1wherename=1”,则在result中遍历,当result中存在name=1,则得到目标程序语句对应的目标结果。

当result中不存在name=1,那么在表1中查询“selectfrom表1wherename=1”。

上述程序语句处理方法中,通过获取程序语句,确定程序语句中的重复语句,能得到程序语句中的冗余代码;当重复语句为用于查询的第一语句时,获取第一语句对应的查询结果,缓存查询结果,当检测到含有与第一语句中查询字段相同的目标程序语句时,根据目标程序语句从缓存的查询结果中查询对应的目标结果,则当遇到程序中的重复语句时,不需要遍历整个数据库或者文件路径等,只需要查询一次,后续可直接从缓存中得到结果,优化该程序,提高程序语句的处理效率。

在一个实施例中,一种程序语句处理方法,该方法包括:获取sql语句;确定sql语句中的重复语句;当重复语句为用于查询的第一语句时,获取第一语句对应的查询结果;缓存查询结果;当检测到含有与所述第一语句中查询字段相同的目标程序语句时,根据目标程序语句从缓存的所述查询结果中查询对应的目标结果。

上述程序语句处理方法中,通过获取程序语句,确定程序语句中的重复语句,能得到程序语句中的冗余代码;当重复语句为用于查询的第一语句时,获取第一语句对应的查询结果,缓存查询结果,当检测到含有与第一语句中查询字段相同的目标程序语句时,根据目标程序语句从缓存的查询结果中查询对应的目标结果,则当遇到程序中的重复语句时,不需要多次调用sql数据库或者文件路径等,只需要调用一次,后续可直接从缓存中得到结果,优化该程序,提高程序语句的处理效率。

在一个实施例中,当重复语句为用于查询的第一语句时,获取第一语句对应的查询结果,包括:当重复语句为用于查询的第一语句,且重复语句中的参数不发生变化时,获取第一语句对应的查询结果。

例如重复语句为“selectfrom表1wherename=1”,重复语句中的参数为“1”,而“1”不发生变化,重复语句为“selectfrom表1wherenameindifilterarray”,那么重复语句中的参数为“difilterarray”。

具体地,计算机设备检测该重复语句是否为用于查询的第一语句。当重复语句为用于查询的第一语句时,计算机设备检测重复语句中的参数是否发生变化。当重复语句中的参数不发生变化时,计算机设备根据第一语句查询得到对应的查询结果。

本实施例中,当该查询结果的信息量小于或等于预设信息量时,缓存该查询结果。

本实施例中,循环中的重复包括循环中查询条件与内容都相同的循环,例如:

循环1:(循环10次)

标记(循环1开始)

select*fromid=4

标记(循环1结束)

其中,select*fromid=4是重复语句,其中的参数为“4”,不发生变化,则计算机设备在第一次执行该循环时,计算机设备获取第一语句对应的查询结果,并缓存。

上述程序语句处理方法,当重复语句为用于查询的第一语句,且重复语句中的参数不发生变化时,获取第一语句对应的查询结果,并缓存该查询结果,能够用于优化该程序,提高程序语句的处理效率。

在一个实施例中,当重复语句为用于查询的第一语句时,获取第一语句对应的查询结果,包括:当重复语句为用于查询的第一语句,且重复语句中的参数发生变化,且重复语句不在循环中时,获取第一语句对应的查询结果。根据目标程序语句从缓存的查询结果中查询对应的目标结果,包括:根据目标程序语句中的查询字段以及对应的参数从缓存的查询结果中查询对应的目标结果。

其中,循环是指程序的循环,例如c语言语句中的“for”或者“while”语句等。重复语句不在循环中是指该重复语句不在任何一个循环中,是一个独立的语句。

具体地,计算机设备检测该重复语句是否为用于查询的第一语句。当重复语句为用于查询的第一语句时,计算机设备检测重复语句中的参数是否发生变化。当重复语句中的参数发生变化时,计算机设备根据第一语句查询得到对应的查询结果。缓存该查询结果。计算机设备根据该目标程序语句中的查询字段以及对应的参数从缓存的查询结果中查询对应的目标结果。

本实施例中,当查询结果的信息量小于或等于预设信息量时,缓存该查询结果。

上述程序语句处理方法,当重复语句为用于查询的第一语句,且重复语句中的参数发生变化,且重复语句不在循环中时,获取第一语句对应的查询结果,能够直接存储参数发生变化的重复语句对应的查询结果,能够用于优化该程序,提高程序语句的处理效率。

在一个实施例中,当重复语句为用于查询的第一语句时,获取第一语句对应的查询结果,包括:当重复语句为用于查询的第一语句,且重复语句中的参数发生变化,且重复语句在循环中时,执行重复语句对应的循环;当循环执行完毕时,得到循环结果;根据循环结果获取第一语句对应的查询结果。

具体地,计算机设备检测该重复语句是否为用于查询的第一语句。当重复语句为用于查询的第一语句时,计算机设备检测重复语句中的参数是否发生变化。当重复语句中的参数发生变化时,计算机设备检测重复语句是否在循环中。当重复语句在循环中时,计算机设备执行重复语句所在的循环。当该循环执行完毕时,得到循环结果。计算机设备根据循环结果获取第一语句对应的查询结果。

例如,

声明一个集合idfilterarray

声明数组array

循环:遍历array,当前循环次数为i

idfilterarray.add(array.get(i))

循环结束

select*from表1wherenameindifilterarray

那么,只需要调用一次数据库中的表1即可得到查询结果。

上述程序语句处理方法,当重复语句为用于查询的第一语句,且重复语句中的参数发生变化,且重复语句在循环中时,执行重复语句对应的循环;当循环执行完毕时,得到循环结果,根据循环结果获取第一语句对应的查询结果,可以避免每循环一次即查询一次数据库,而是当循环结束时才查询一次数据库,提高程序语句处理效率。

在一个实施例中,检测重复语句在循环中的方式,包括:获取循环开始标记以及对应的循环结束标记;当重复语句为循环开始标记以及对应的循环结束标记之间的语句时,确定重复语句在循环中。

具体地,计算机设备获取程序语句中的循环开始标记以及对应的循环结束标记。当重复语句在循环开始标记之后以及循环结束标记之前时,确定该重复语句在循环中。

例子如下:

循环1:

标记循环1开始

循环2:

标记循环2开始

语句1

语句2

标记循环2结束

标记循环1结束

设语句1为重复语句,也为用于查询的第一语句,那么计算机设备可确定语句1在循环2中。

本实施例中,计算机设备获取循环开始标记以及对应的循环结束标记。当该重复语句为目标循环开始标记以及对应的目标循环结束标记之间的语句时,其中,该目标循环开始标记以及对应的目标循环结束标记用于标记目标循环,确定该重复语句在该目标循环中。

上述程序语句处理方法中,能够通过循环标记从而确定重复语句是否在循环中,提高程序语句处理效率。

在一个实施例中,获取第一语句对应的查询结果,包括:获取第一语句对应的查询结果的信息量;当该查询结果的信息量小于或等于信息量阈值时,获取查询结果。

其中,信息量是信息多少的量度。信息量即信息占用的内存大小。信息量的单位具体可以是kb(kilobyte,千字节)、mb(mebibyte,兆字节)等不限于此。查询结果的信息量可根据查询结果的属性大小以及数据量计算得到。数据量具体可以是指数据的条数。

具体地,计算机设备获取第一语句对应的查询结果的信息量。计算机设备判断查询结果的信息量是否大于预设信息量阈值。当计算机设备检测到该查询结果的信息量小于或等于预设信息量阈值时,获取查询结果,缓存该查询结果。

本实施例中,查询结果由属性构成,属性是一种数据,数据有自己的数据类型,比如varchar[20]。varchar[20]的最大长度为20。例如记录的内容是备注,而备注的长度不限,可能为5,可能为8,故按最大长度20来算。每个长度代表几个比特位,二者乘积就是一个属性所占内存。所有的属性按这种方式计算所占内存后加和,此和就是一条数据所占内存大小。再与查询结果的数据量相乘,得到查询结果所占用的内存大小,即查询结果的信息量。当该查询结果的信息量大于信息量阈值时,则超标。

本实施例中,当查询结果的信息量大于信息量阈值时,发出告警信息。

上述程序语句处理方法中,获取第一语句对应的查询结果的信息量,当该查询结果的信息量小于或等于信息量阈值时,获取查询结果,缓存该查询结果,能够避免因缓存查询结果而导致数据量过大,避免影响其他程序的运行,提高程序语句处理速度。

在一个实施例中,确定所述程序语句中的重复语句,包括:当程序语句的执行次数大于预设执行次数时,通过调用至少两次程序统计程序语句的重复比例;当重复比例大于预设比例时,确定程序语句为重复语句。

其中,预设执行次数可以是在计算机设备或服务器预设的次数临界值。预设比例可以是在计算机设备或服务器中预设的比例临界值。重复比例可以是该程序语句的次数和调用程序的次数的比值。

具体地,计算机设备调用一次程序,并判断程序中的程序语句的执行次数。当该程序语句在数据库中的执行次数大于预设执行次数,通过调用至少两次程序统计该程序中程序语句的重复比例。当该重复比例大于预设比例时,确定该程序语句为重复语句。

本实施例中,计算机设备调用一次方法,出现某一条重复的sql语句,记录重复的sql语句。设此重复sql语句为q,计算机设备继续判定,判定方法为:计算机设备调用方法a次,a次中q被判定为重复sql语句的次数为n,n超过预设比例则确定q为重复sql语句。此处n超过阈值也可用n/a超过预设比例代替。其中,方法是计算机线程的概念,线程由一系列步骤组成。计算机设备调用一次方法即计算机设备调用一次线程。

本实施例中,例如预设执行次数为1,那么循环中的语句则是执行次数大于预设执行次数的语句。计算机设备通过调用至少两次程序统计程序语句的重复比例,当重复比例大于预设比例时,确定该循环为重复语句。

本实施例中,由于计算机设备每次调用该程序时可能存在不同的api(applicationprogramminginterface,应用程序编程接口)。那么,计算机设备调用多次程序时,可能会得到不同的程序语句。因此,每次调用完程序后的重复比例可能不相同。

本实施例中,如图3所示,为一个实施例中确定重复语句的流程示意图,包括:

步骤302,获取程序语句。

步骤304,确定是否存在未检测的程序语句。

具体地,当存在未检测的程序语句时,执行步骤306;当不存在未检测的程序语句时,结束。

步骤306,当该程序语句为用于查询的第一语句时,判断该程序语句的执行次数是否大于预设执行次数。

具体地,当该程序语句的执行次数大于预设执行次数时,执行步骤308;当该程序语句的执行次数小于或等于预设执行次数时,返回执行步骤304。

步骤308,通过调用至少两次程序统计重复比例。

步骤310,判断重复比例是否大于预设重复比例。

具体地,当该重复比例小于或等于预设重复比例时,返回执行步骤304。

步骤312,当重复比例大于预设重复比例时,确定该程序语句为重复语句,并记录。

上述程序语句处理方法,当程序语句的执行次数大于预设执行次数时,通过调用至少两次程序统计程序语句的重复比例,当重复比例大于预设比例时,确定程序语句为重复语句,能够确定程序语句中的重复语句,并对重复语句进行优化处理,提高程序语句的处理效率。

在一个实施例中,该程序语句处理方法还包括:当该重复语句为用于更新的第二语句,且该第二语句在循环中时,执行第二语句对应的循环;当执行第二语句对应的循环达到预设循环次数时,更新第二语句对应的数据库。

其中,用于更新的第二语句是指用于在数据库中进行增加操作、删除操作、修改操作中至少一种的语句。当第二语句在循环中时,说明第二语句需要批量更新。预设循环次数可以是存储在计算机设备或服务器中的循环次数。预设循环次数例如可以是5次、10次等。

具体地,针对单次方法,即计算机设备调用一次程序。当该重复语句为用于更新的第二语句,且该第二语句在循环中时,执行第二语句对应的循环。当计算机设备执行第二语句对应的循环达到预设循环次数时,批量更新第二语句对应的数据库。例如,第二语句对应的循环为30次,那么当执行第二语句对应的循环每达到10次时,更新第二语句对应的数据库。或者,第二语句对应的循环为30次,那么执行第二语句对应的循环达到30次时,即循环的最后一次时,更新第二语句对应的数据库。当针对多次方法,即多个线程时,重复语句可在数据库中记录,成为热点数据。

上述程序语句处理方法中,当该重复语句为用于更新的第二语句,且该第二语句在循环中时,执行第二语句对应的循环,即该第二语句需要批量更新,那么当执行第二语句对应的循环达到预设循环次数时更新第二语句对应的数据库,能避免执行每次循环就更新一次,减少数据库更新次数,提高程序语句处理效率。

在一个实施例中,该程序语句处理方法还包括:当该重复语句为用于更新的第二语句时,在计算机设备显示调用的堆栈。

其中,堆栈是指按序排列的数据结构,只能在一端对数据项进行插入和删除。堆栈可以是指重复语句在哪个方法的哪个位置产生的。堆栈中可以包括方法、审计、位置等。其中,审计可用于追踪和记录sqlserver实例或数据库中发生的事件。审计主要包括审计对象(audit)和审计规范(auditspecification)。

上述程序语句处理方法中,当该重复语句为用于更新的第二语句时,在计算机设备显示调用的堆栈,能够直观地展示数据更新过程,并且容易查找到漏洞,提高数据更新的效率以及安全性。

在一个实施例中,如图3所示,为另一个实施例中程序语句处理方法的流程示意图,包括:

步骤402,计算机设备获取重复语句。

步骤404,计算机设备判断该重复语句是否为增删改语句。

具体地,计算机的设备判断该重复语句是否为用于更新的第二语句。

步骤406,当该重复语句为增删改语句时,发出告警信息以提示运维人员。

步骤408,计算机设备获取是否优化的指令。

步骤410,当计算机设备获取到优化指令时,对该增删改语句进行批量处理。

步骤412,当该重复语句不为增删改语句,即该重复语句为查询语句时,判断该重复语句中的参数是否相同。

具体地,即计算机设备判断该重复语句中的参数是否发生变化。

步骤414,计算机设备根据查询结果参数类型最大值与结果集数量判断查询结果是否超标。

具体地,根据查询结果参数类型最大值与结果集数量即可得到查询结果的信息量。是否超标即为是否超过预设信息量。

步骤416,当该查询结果超标时,计算机设备发出告警信息以提示运维人员。

步骤418,当该查询结果未超标时,缓存该查询结果。若后续存在查询字段相同的语句,则使用本次结果。

具体地,当获取到存在查询字段相同的目标程序语句时,从缓存中获取该目标程序语句对应的查询结果。

步骤420,当该重复语句中的参数不相同时,判断该重复语句是否在循环中。

步骤422,当该重复语句在循环中时,追溯引用,按循环层级组织参数。

具体地,当该重复语句在循环中时,根据循环中的参数执行对应的循环。

步骤424,计算机设备根据查询结果参数类型最大值与结果集数量判断查询结果是否超标。

步骤426,当该查询结果超标时,计算机设备发出告警信息以提示运维人员。

步骤428,当该查询结果未超标时,缓存该查询结果。若后续存在查询字段相同但参数不同的语句,则调用本次结果,进行参数匹配,并查找结果。

上述程序语句处理方法中,通过确定程序语句中的重复语句,能得到程序语句中的冗余代码;通过增删改语句、参数、循环的判断,能对不同语句做不同的处理,则当遇到程序中的重复语句时,不需要多次调用数据库或者文件路径等,只需要调用一次,判断查询结果的数据量,当数据量不超标时缓存查询结果,避免占用过多内存,后续可直接从缓存中得到结果,优化该程序,提高程序语句的处理效率。

在一个实施例中,一种程序语句处理方法,包括:

步骤(a1),获取数据库程序语句。

步骤(a2),确定数据库程序语句中的重复语句。

步骤(a3),当重复语句为用于查询的第一语句,且重复语句中的参数不发生变化时,获取第一语句对应的查询结果。

步骤(a4),当重复语句为用于查询的第一语句,且重复语句中的参数发生变化,且重复语句不在循环中时,获取第一语句对应的查询结果。

步骤(a5),当重复语句为用于查询的第一语句,且重复语句中的参数发生变化,且重复语句在循环中时,执行重复语句对应的循环;当循环执行完毕时,得到循环结果;根据循环结果获取第一语句对应的查询结果。

步骤(a6),缓存查询结果。

步骤(a7),当检测到含有与第一语句中查询字段相同的目标程序语句时,根据目标程序语句从缓存的查询结果中查询对应的目标结果。

步骤(a8),当重复语句为用于更新的第二语句,且第二语句在循环中时,执行第二语句对应的循环;当执行第二语句对应的循环达到预设循环次数时,更新第二语句对应的数据库。

上述程序语句处理方法中,通过获取程序语句,确定程序语句中的重复语句,能得到程序语句中的冗余代码;当重复语句为用于查询的第一语句时,获取第一语句对应的查询结果,缓存查询结果,当检测到含有与第一语句中查询字段相同的目标程序语句时,根据目标程序语句从缓存的查询结果中查询对应的目标结果,则当遇到程序中的重复语句时,不需要遍历整个数据库或者文件路径等,只需要查询一次,后续可直接从缓存中得到结果,优化该程序,提高程序语句的处理效率。

应该理解的是,虽然图3和图4的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图3和图4中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,图5为一个实施例中程序语句处理装置的结构框图。如图5所示,提供了一种程序语句处理装置,包括:第一获取模块502、确定模块504、第二获取模块506、缓存模块508和查询模块510,其中:

第一获取模块502,用于获取程序语句。

确定模块504,用于确定程序语句中的重复语句。

第二获取模块506,用于当重复语句为用于查询的第一语句时,获取第一语句对应的查询结果。

缓存模块508,用于缓存查询结果。

查询模块510,用于当检测到含有与第一语句中查询字段相同的目标程序语句时,根据目标程序语句从缓存的查询结果中查询对应的目标结果。

上述程序语句处理装置中,通过获取程序语句,确定程序语句中的重复语句,能得到程序语句中的冗余代码;当重复语句为用于查询的第一语句时,获取第一语句对应的查询结果,缓存查询结果,当检测到含有与第一语句中查询字段相同的目标程序语句时,根据目标程序语句从缓存的查询结果中查询对应的目标结果,则当遇到程序中的重复语句时,不需要遍历整个数据库或者文件路径等,只需要查询一次,后续可直接从缓存中得到结果,优化该程序,提高程序语句的处理效率。

在一个实施例中,第一获取模块502用于获取sql语句。确定模块504用于确定sql语句中的重复语句。第二获取模块506用于当重复语句为用于查询的第一语句时,获取第一语句对应的查询结果。缓存模块508用于缓存查询结果。查询模块510用于当检测到含有与第一语句中查询字段相同的目标程序语句时,根据目标程序语句从缓存的查询结果中查询对应的目标结果。

上述程序语句处理装置中,通过获取程序语句,确定程序语句中的重复语句,能得到程序语句中的冗余代码;当重复语句为用于查询的第一语句时,获取第一语句对应的查询结果,缓存查询结果,当检测到含有与第一语句中查询字段相同的目标程序语句时,根据目标程序语句从缓存的查询结果中查询对应的目标结果,则当遇到程序中的重复语句时,不需要多次调用sql数据库或者文件路径等,只需要调用一次,后续可直接从缓存中得到结果,能够在出现程序语句冗余的情况下优化该程序,提高程序语句的处理效率。

在一个实施例中,第二获取模块506用于当重复语句为用于查询的第一语句,且重复语句中的参数不发生变化时,获取第一语句对应的查询结果。

上述程序语句处理装置,当重复语句为用于查询的第一语句,且重复语句中的参数不发生变化时,获取第一语句对应的查询结果,并缓存该查询结果,能够用于优化该程序,提高程序语句的处理效率。

在一个实施例中,第二获取模块506用于当重复语句为用于查询的第一语句,且重复语句中的参数发生变化,且重复语句不在循环中时,获取第一语句对应的查询结果。查询模块510用于根据目标程序语句中的查询字段以及对应的参数从缓存的查询结果中查询对应的目标结果。

上述程序语句处理装置,当重复语句为用于查询的第一语句,且重复语句中的参数发生变化,且重复语句不在循环中时,获取第一语句对应的查询结果,能够直接存储参数发生变化的重复语句对应的查询结果,能够用于优化该程序,提高程序语句的处理效率。

在一个实施例中,第二获取模块506用于当重复语句为用于查询的第一语句,且重复语句中的参数发生变化,且重复语句在循环中时,执行重复语句对应的循环;当循环执行完毕时,得到循环结果;根据循环结果获取第一语句对应的查询结果。

上述程序语句处理装置,当重复语句为用于查询的第一语句,且重复语句中的参数发生变化,且重复语句在循环中时,执行重复语句对应的循环;当循环执行完毕时,得到循环结果,根据循环结果获取第一语句对应的查询结果,可以避免每循环一次即查询一次数据库,而是当循环结束时才查询一次数据库,提高程序语句处理效率。

在一个实施例中,第二获取模块506用于取循环开始标记以及对应的循环结束标记;当重复语句为循环开始标记以及对应的循环结束标记之间的语句时,确定重复语句在循环中。

上述程序语句处理装置中,能够通过循环标记从而确定重复语句是否在循环中,提高程序语句处理效率。

在一个实施例中,第二获取模块506用于获取第一语句对应的查询结果的信息量;当该查询结果的信息量小于或等于信息量阈值时,获取查询结果。

上述程序语句处理装置中,获取第一语句对应的查询结果的信息量,当该查询结果的信息量小于或等于信息量阈值时,获取查询结果,缓存该查询结果,能够避免因缓存查询结果而导致数据量过大,避免影响其他程序的运行,提高程序语句处理速度。

在一个实施例中,确定模块504用于当程序语句的执行次数大于预设执行次数时,通过调用至少两次程序统计程序语句的重复比例;当重复比例大于预设比例时,确定程序语句为重复语句。

上述程序语句处理装置中,获取第一语句对应的查询结果的信息量,当该查询结果的信息量小于或等于信息量阈值时,获取查询结果,缓存该查询结果,能够避免因缓存查询结果而导致数据量过大,避免影响其他程序的运行,提高程序语句处理速度。

在一个实施例中,该程序语句处理装置还包括更新模块。更新模块用于当该重复语句为用于更新的第二语句,且该第二语句在循环中时,执行第二语句对应的循环;当执行第二语句对应的循环达到预设循环次数时,更新第二语句对应的数据库。

上述程序语句处理装置中,当该重复语句为用于更新的第二语句,且该第二语句在循环中时,执行第二语句对应的循环,即该第二语句需要批量更新,那么当执行第二语句对应的循环达到预设循环次数时更新第二语句对应的数据库,能避免执行每次循环就更新一次,减少数据库更新次数,提高程序语句处理效率。

在一个实施例中,该程序语句处理装置还包括显示模块。该显示模块用于当该重复语句为用于更新的第二语句时,在终端显示调用的堆栈。

上述程序语句处理装置中,当该重复语句为用于更新的第二语句时,在终端显示调用的堆栈,能够直观地展示数据更新过程,并且容易查找到漏洞,提高数据更新的效率以及安全性。

关于程序语句处理装置的具体限定可以参见上文中对于程序语句处理方法的限定,在此不再赘述。上述程序语句处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图6所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种程序语句处理方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。

本领域技术人员可以理解,图6中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各个方法实施例中的步骤。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述各个方法实施例中的步骤。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

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