掌桥专利:专业的专利平台
掌桥专利
首页

数据查询方法、装置、设备及存储介质

文献发布时间:2024-04-18 20:02:18


数据查询方法、装置、设备及存储介质

技术领域

本申请涉及数据库领域,具体而言,涉及一种数据查询方法、装置、设备及存储介质。

背景技术

当前低代码、零代码技术的应用越来越成熟,基于可视化的配置页面即可进行数据表的动态创建,并基于Java工厂模式、数据持久层(ORM)框架模板、动态数据源实现动态SQL的拼装和执行,进而实现对数据表的增删改查操作接口。但这种实现方法,只能实现对单表的操作接口,其不能灵活配置请求参数,无法实现对数据库视图的查询接口,无法实现自定义SQL多表连接查询的API接口。

发明内容

本申请实施例的目的在于提供一种数据查询方法、装置、设备及存储介质,用以使得查询方法支持多种数据源类型,及支持数据源的动态配置。

第一方面,本申请提供一种数据查询方法,所述方法包括:接收查询请求,依据所述查询请求中的查询参数构建查询变量;获取所述查询请求所请求的应用程序接口的配置信息,所述配置信息是预设的,包括所述应用程序接口关联的数据源、数据源类型;依据所述查询变量和所述配置信息构建查询语句,将所述查询语句发送至应用程序接口以查询数据。

上述数据查询方法,获取查询请求所请求的应用程序接口的配置信息,依据配置信息及查询请求中的查询参数构建查询语句,通过在配置信息中的设置数据源类型进行查询语句的构建,可以使得查询方法支持多种数据源类型,并且支持数据源的动态配置。

在本申请可选实施例中,所述方法还包括:验证所述查询请求中携带的签名及访问令牌是否正确;若验证结果表示所述签名或所述访问令牌错误,则中断查询。

上述实施例中,对查询请求中签名及访问令牌进行验证,能够过滤非法的查询请求,保证数据安全。

在本申请可选实施例中,所述方法还包括:获取所述查询请求中访问令牌对应的授权编号,所述授权编号是针对调用方预先生成的;获取所述授权编号对应的应用程序接口编号;判断所获取的应用程序接口编号与所述查询请求中携带的应用程序接口编号是否一致。

上述实施例中,对查询请求中携带的应用程序接口编号的权限进行鉴权验证,保证了查询的安全性。

在本申请可选实施例中,所述依据所述查询变量和所述配置信息构建查询语句,包括:获取所述配置信息中的数据源类型;若所述数据源类型为数据表,将所述配置信息中数据表名称、查询条件及查询变量拼接到表查询SQL语句中,生成查询SQL语句;若所述数据源类型为视图,将所述配置信息中视图名称、查询条件及查询变量拼接到视图查询SQL语句中,生成查询SQL语句;若所述数据源类型为自定义SQL,将所述配置信息中查询变量拼装到自定义SQL语句的查询条件中,生成查询SQL语句。

上述实施例中,依据应用程序接口对应的数据源类型,选择不同的查询SQL语句的生成方式,使得生成的查询语句可以支持多种数据源类型。

在本申请可选实施例中,所述将所述查询语句发送至所述应用程序接口以查询数据,包括:将所述配置信息中数据源连接信息及所述查询语句发送至所述应用程序接口;其中,所述数据源连接信息用于使所述应用程序接口调用数据库连接器,依据所述数据源连接信息切换数据源连接,所述查询语句用于使所述应用程序接口执行所述查询语句,获取所述查询语句对应的查询结果。

上述实施例中,通过将配置信息中数据源连接信息发送至应用程序接口,应用程序接口通过数据库连接器切换数据源,可以实现数据源的动态切换。

在本申请可选实施例中,预先设置有调用信息,所述调用信息包括:授权编号、授权密钥、公钥、私钥,所述方法还包括:接收登录请求,所述登录请求中携带所述签名,所述签名通过所述私钥加密所述授权编号和所述授权密钥得到;通过所述公钥解密所述签名,获取所述签名携带的授权编号和授权密钥;验证所述签名携带的授权编号和授权密钥是否与本地预存的所述调用信息中的授权编号和授权密钥相同;若所述签名携带的授权编号和授权密钥与本地预存的所述调用信息中的授权编号和授权密钥相同,生成与授权编号对应的访问令牌。

上述实施例中,对发出查询请求的调用方进行身份验证,验证成功后生成访问令牌,在调用方的查询请求携带访问令牌中可以证明调用方的身份,维护了查询的安全性。

在本申请可选实施例中,所述方法还包括:对应用程序接口关联的数据源及数据源类型进行设置;确认所述数据源是否连接成功;若所述数据源连接成功,将设置的信息保存为所述配置信息。

上述实施例中,预先设置应用程序接口的配置信息,实现对应用程序接口对应数据源的说明,在使用接口时可以依据配置信息成功生成动态SQL,实现数据查询。

在本申请可选实施例中,所述接收查询请求,依据所述查询请求中的查询参数构建查询变量,包括:统一网关服务接收所有应用程序接口的所述查询请求,依据所述查询请求中的查询参数构建所述查询变量;并将所述查询变量发送至动态SQL工厂类;所述获取所述查询请求所请求的应用程序接口的配置信息,包括:所述动态SQL工厂类获取所述查询请求所请求的应用程序接口的配置信息;所述依据所述查询变量和所述配置信息构建查询语句,将所述查询语句发送至所述应用程序接口以查询数据,包括:所述动态SQL工厂类依据所述查询变量和所述配置信息构建查询语句,并将所述查询语句发送至所述应用程序接口以查询数据。

上述实施例中,使用统一网关实现对查询请求的接收,使用动态SQL工厂类实现查询语句的构建,将统一网关服务与动态SQL执行进行了分离,使得对查询请求的处理和转发、对SQL的动态拼装和执行进行解耦,两个服务可以单独执行、并行执行,不占用同一个计算机线程,提高了执行效率。

第二方面,本申请提供一种数据查询装置,所述装置包括:接收模块,用于接收查询请求,依据所述查询请求中的查询参数构建查询变量;获取模块,用于获取所述查询请求所请求的应用程序接口的配置信息,所述配置信息是预设的,包括所述应用程序接口关联的数据源、数据源类型;查询模块,用于依据所述查询变量和所述配置信息构建查询语句,将所述查询语句发送至所述应用程序接口以查询数据。

第三方面,本申请提供一种电子设备,特征在于,包括:处理器和存储器;所述处理器和所述存储器通过总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如第一方面中任一项所述的数据查询方法。

第四方面,本申请提供一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序指令,所述计算机程序指令被计算机读取并运行时,执行如第一方面中任一项所述的数据查询方法。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本申请实施例提供的数据查询方法的流程图;

图2为本申请实施例提供的数据查询装置的示意框图;

图3为本申请实施例提供的电子设备的示意框图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。

图1为本申请实施例提供的数据查询方法的流程图,如图1所示,所述方法包括步骤110至步骤130:

步骤110,接收查询请求,依据所述查询请求中的查询参数构建查询变量。

接收调用方发送的查询请求,获取查询请求中的查询参数。依据查询参数构建查询变量。调用方就是需要通过API(Application Programming Interface,应用程序接口)来获取数据的用户方,一般为具体的业务系统、应用系统。

示例的,调用方的请求参数封装和传参方式为:get方式,如http://ip:port/url?pageNo=1&pageSize=10&变量名1=变量值&变量名2=变量值&变量名n=变量值;post方式,按json(JavaScript Object Notation, JS对象简谱)格式封装如下的参数格式{"pageNo":1,"pageSize":10,"变量名1":"变量值","变量名2":"变量值","变量名n":"变量值"}。

调用方将请求参数放在请求体中,并根据接口URL(Uniform Resource Locator,统一资源定位器)地址、接口调用说明,发起HTTP(Hypertext Transfer Protocol,超文本传输协议)请求流程。接口调用说明是指接口的请求方法、返回数据解析方法,按照现有的HTTP协议、JSON格式、加解密技术、签名技术,制定的具体要求。

将调用方发送的查询请求中的查询参数解析成key-value查询变量。如,get方式,从请求地址中获取查询参数解析key-value查询变量;post方式则从请求体中解析出json格式查询参数解析为key-value查询变量。

在本申请一个实施例中,所述方法还包括:验证所述查询请求中携带的签名及访问令牌是否正确;若验证结果表示所述签名或所述访问令牌错误,则中断查询。

接收到查询请求后,接收方验证查询请求中携带的签名的合法性,例如,生成一套密钥,密钥包括:公钥(pubKey)、privateKey(私钥),调用方使用私钥及加密算法生成调用签名sign=SM3Encrypt(调用方名称+timestamp +random),调用方和接收方保存生成的密钥。接收方使用公钥获取调用签名中的调用方名称,验证调用方名称是否已经注册,若已经注册,则说明签名合法。及,验证查询请求中携带的accesToken(访问令牌)的合法性。例如,为每一调用方预先生成唯一的访问令牌,接收方收到调用请求后,获取其中携带的访问令牌,若本地存在相同的访问令牌,说明访问令牌合法。

若验证结果表示所述签名或所述访问令牌错误,则验证不通过,中断流程,返回错误码;若验证通过,则继续执行。

上述实施例中,对查询请求中签名及访问令牌进行验证,能够过滤非法的查询请求,保证数据安全。

在本申请一个实施例中,预先设置有调用信息,所述调用信息包括:授权编号、授权密钥、公钥、私钥;所述方法还包括:接收登录请求,所述登录请求中携带所述签名,所述签名通过所述私钥加密所述授权编号和所述授权密钥得到;通过所述公钥解密所述签名,获取所述签名携带的授权编号和授权密钥;验证所述签名携带的授权编号和授权密钥是否与本地预存的所述调用信息中的授权编号和授权密钥相同;若所述签名携带的授权编号和授权密钥与本地预存的所述调用信息中的授权编号和授权密钥相同,生成与授权编号对应的访问令牌。

预先为调用方生成调用信息,所述调用信息包括:授权编号(appKey)、appSecret(授权密钥)、公钥(pubKey)、私钥(privateKey),并且将调用信息与应用程序接口的APIID(Application Programming Interface Identity document,应用程序接口编号)进行绑定。调用信息在调用方和接收方分别进行保存。

调用方发起调用请求之前,首先需要获取访问令牌。示例的,调用方请求接收方如统一网关服务的登录接口,以获取访问令牌(accesToken)。调用方获取调用方本地保存的调用信息中的授权编号、授权密钥,并用SM3国密算法生成调用签名:sign=SM3Encrypt(appKey + timestamp + appSecret + random),按照要求封装登录请求,并发起请求获取accesToken;

统一网关服务接收到登录请求后,使用统一网关服务本地保存的调用信息中的授权编号、授权密钥及SM3算法进行验签,验签通过后,还判断授权编号是否合法。如,统一网关服务通过公钥解密所述签名,如果成功获取到签名携带的授权编号和授权密钥,则验签成功,进一步的验证签名携带的授权编号和授权密钥是否与统一网关服务本地预存的调用信息中的授权编号和授权密钥相同,若不相同,说明授权编号不合法,则中断流程,返回错误码;若相同,说明授权编号合法,则生成一个与授权编号绑定的登录访问令牌,将访问令牌返回给调用方。

上述实施例中,对发出查询请求的调用方进行身份验证,验证成功后生成访问令牌,在调用方的查询请求携带访问令牌中可以证明调用方的身份,维护了查询的安全性。

在申请一个实施例中,所述方法还包括:获取所述查询请求中访问令牌对应的授权编号,所述授权编号是针对调用方预先生成的;获取所述授权编号对应的应用程序接口编号;判断所获取的应用程序接口编号与所述查询请求中携带的应用程序接口编号是否一致。

获取查询请求中的访问令牌,根据访问令牌获取到访问令牌绑定的授权编号,并根据授权编号获取到授权编号绑定的应用程序接口编号,如果获取不到应用程序接口编号,则鉴权不通过;若获取到应用程序接口编号,则继续执行。

上述实施例中,对查询请求中携带的应用程序接口编号的权限进行鉴权验证,保证了查询的安全性。

步骤120,获取所述查询请求所请求的应用程序接口的配置信息,所述配置信息是预设的,包括所述应用程序接口关联的数据源、数据源类型。

示例的,通过查询请求的访问地址中的应用程序接口编号,获取应用程序接口的配置信息,所述配置信息是预设的,包括应用程序接口关联的数据源、数据源类型。

在本申请一个实施例中,所述方法还包括:对应用程序接口关联的数据源及数据源类型进行设置;确认所述数据源是否连接成功;若所述数据源连接成功,将设置的信息保存为所述配置信息。

设置应用程序接口关联的数据源及数据源类型如数据表、视图、自定义SQL(Structured Query Language,结构化查询语言)等。示例的,通过可视化接口配置模块对应用程序接口的基础信息进行配置,在可视化接口配置模块上输入接口名称、接口描述,选择请求方式(post/get)等,可视化接口配置模块依据输入信息进行配置。

通过可视化接口配置模块对接口关联的数据源类型(如数据表、视图、自定义SQL)、数据源进行配置。

若数据源类型为数据表或视图,则选择某个数据库、及数据表或视图作为数据源。若数据源类型为自定义SQL,则选择数据库,并编写SQL语句。

设置完应用程序接口关联的数据源后,然后对数据源进行连接,确认数据源是否能连接成功。

进一步的,通过可视化接口配置模块对接口返回信息进行配置。若数据源类型为数据表或视图,获取数据表或视图的字段,返回该数据源中的全字段示例数据(例如,只需前10条即可),根据字段名称和示例数据,然后选择哪些字段作为返回字段。若数据源类型为自定义SQL,则通过数据库连接器执行自定义SQL,返回结果集字段,从结果集字段中选择哪些字段作为返回字段。

进一步的,通过可视化接口配置模块对接口请求参数进行配置,自定义添加请求参数,并设置数据表或视图字段与请求参数的映射和条件关系。字段与请求参数的映射和条件关系,指生成动态SQL,将字段与查询条件进行拼装的关系。例如,从数据库中查询数据表或视图字段时,将根据此配置对SQL查询条件进行拼装,生成动态SQL。若数据源类型为自定义SQL,则需设置自定义SQL查询条件中的字段与请求参数的映射和条件关系。

可视化接口配置模块配置的信息保存到数据库的接口配置表中,生成配置信息。并且为可视化接口配置模块生成应用程序接口编号作为唯一标识。

可选的,除生成配置信息外,还生成的接口地址、接口调用说明、调用信息等,将生成的接口地址、接口调用说明、调用信息等提供给调用方。调用方依据这些信息即可发起请求。

上述实施例中,预先设置应用程序接口的配置信息,实现对应用程序接口对应数据源的说明,在使用接口时可以依据配置信息成功生成动态SQL,实现数据查询。

步骤130,依据所述查询变量和所述配置信息构建查询语句,将所述查询语句发送至所述应用程序接口以查询数据。

依据配置信息中所指定数据源、数据源类型及查询变量构建查询语句,将构建完成的查询语句发送至应用程序接口,以使应用程序接口执行查询语句来查询数据。示例的,获取配置信息中数据源、数据源类型对应的查询语句构建方法,依据查询语句构建方法及查询变量构建查询语句。

在本申请一个实施例中,所述依据所述查询变量和所述配置信息构建查询语句,包括:获取所述配置信息中的数据源类型;若所述数据源类型为数据表,将所述配置信息中数据表名称、查询条件及查询变量拼接到表查询SQL语句中,生成查询SQL语句;若所述数据源类型为视图,将所述配置信息中视图名称、查询条件及查询变量拼接到视图查询SQL语句中,生成查询SQL语句;若所述数据源类型为自定义SQL,将所述配置信息中查询变量拼装到自定义SQL语句的查询条件中,生成查询SQL语句。

获取得到的配置信息中包括接口关联的数据源类型、数据源,及关联的具体的数据表或视图或自定义SQL,返回数据字段信息,查询条件信息(数据源字段与查询变量的映射和条件关系);

则,可以根据数据源类型,分别执行不同的SQL语句拼装方法:

若数据源类型为数据表,则将数据表名称、查询条件拼接到表查询SQL语句中,并将查询变量拼装到SQL语句的查询条件变量值中,动态生成最终的查询SQL语句。

若数据源类型为视图,则将视图名称、查询条件拼接到视图查询SQL语句中,并将查询变量拼装到SQL语句的查询条件变量值中,动态生成最终的查询SQL语句。

若数据源类型为自定义SQL,则将查询变量拼装到自定义SQL语句的查询条件中作为最终的查询SQL语句。

上述实施例中,依据应用程序接口对应的数据源类型,选择不同的查询SQL语句的生成方式,使得生成的查询语句可以支持多种数据源类型。

在本申请一个实施例中,所述将所述查询语句发送至所述应用程序接口以查询数据,包括:将所述配置信息中数据源连接信息及所述查询语句发送至所述应用程序接口;其中,所述数据源连接信息用于使所述应用程序接口调用数据库连接器,依据所述数据源连接信息切换数据源连接,所述查询语句用于使所述应用程序接口执行所述查询语句,获取所述查询语句对应的查询结果。

应用程序接口调用数据库连接器,依据配置信息中的具体数据源连接信息,动态切换数据源连接,并执行查询语句,获得查询结果。

上述实施例中,通过将配置信息中数据源连接信息发送至应用程序接口,应用程序接口通过数据库连接器切换数据源,可以实现数据源的动态切换。

在本申请一个实施例中,所述接收查询请求,依据所述查询请求中的查询参数构建查询变量,包括:统一网关服务接收所有应用程序接口的所述查询请求,依据所述查询请求中的查询参数构建所述查询变量;并将所述查询变量发送至动态SQL工厂类;所述获取所述查询请求所请求的应用程序接口的配置信息,包括:所述动态SQL工厂类获取所述查询请求所请求的应用程序接口的配置信息;所述依据所述查询变量和所述配置信息构建查询语句,将所述查询语句发送至所述应用程序接口以查询数据,包括:所述动态SQL工厂类依据所述查询变量和所述配置信息构建查询语句,并将所述查询语句发送至所述应用程序接口以查询数据。

可以将接口地址设置为统一网关服务的地址,例如,将接口地址由统一网关服务的URL地址、应用程序接口编号(APIID)拼接而成,如接口地址为:http://ip:port/sjzt_api/APIID,通过地址设置调用方的请求实际上都将到统一网关服务,统一网关服务根据请求中的参数APIID来判断具体按哪个接口配置来处理,例如,统一网关服务会根据URL中的路径参数拦截所有对此类生成接口的请求。然后,统一网关服务根据请求中的参数APIID来判断具体按哪个接口配置来处理。

统一网关服务,可以是一个程序模块,用于实现了请求统一接收,登录认证、请求合法性验证、请求授权验证、请求参数解析、请求动态转发等功能。统一网关服务按照现有的HTTP协议、JSON格式、加解密技术、签名技术实现HTTP请求的请求验签、请求解密、请求参数格式解析、返回数据格式封装、返回加密、返回签名。在使用统一网关服务的实施例中,统一网关服务实现请求验签等功能的具体处理方法也约定了接口的请求方法、返回数据解析方法。根据统一网关服务的请求处理方法和要求,即可形成接口调用说明。

通过统一网关服务将key-value查询变量及APIID转发到动态SQL工厂类。动态SQL工厂类是一个软件模块,一个具体的实施例中其是多个Java程序类。动态SQL工厂类用于依据查询变量和配置信息构建查询语句,及依据查询语句查询数据。

动态SQL工厂类获取接口的配置信息,配置信息中包括接口关联的数据源类型、数据源,及关联的具体的数据表或视图或自定义SQL,返回数据字段信息,查询条件信息如数据源字段与查询变量的映射和条件关系。

动态SQL工厂类根据配置信息分别执行不同的SQL语句拼装方法。如,若数据源类型为数据表,则将数据表名称、查询条件拼接到表查询SQL语句中,并将查询变量拼装到SQL语句的查询条件变量值中,动态生成最终的查询SQL语句。

动态SQL工厂类,调用数据库连接器(JDBC),根据配置信息中的具体数据源连接信息,动态切换数据源连接,并执行查询SQL语句,将SQL查询结果集返回给动态SQL工厂类。

动态SQL工厂类将查询结果集返回给统一网关服务,统一网关服务根据返回数据json格式模板,将结果集封装为json对象data,返回数据json格式模板可以依据需要进行设置,如 [{"数据字段1":"字段值","数据字段2":"字段值","数据字段n":"字段值"},{"数据字段1":"字段值","数据字段2":"字段值","数据字段n":"字段值"},...]。

然后采用授权编号、授权密钥及SM3算法生成签名,采用公钥及SM2算法对返回数据data进行加密,然后将签名、data密文及状态信息、状态码封装成json串返回给调用方。状态信息及状态码示例的格式为: {"message":"###","code":200,"success":"true","timestamp":"1668687246379","sign":"#############","data":"##################"}。

上述实施例中,使用统一网关实现对查询请求的接收,使用动态SQL工厂类实现查询语句的构建,将统一网关服务与动态SQL执行进行了分离,使得对查询请求的处理和转发、对SQL的动态拼装和执行进行解耦,两个服务可以单独执行、并行执行,不占用同一个计算机线程,提高了执行效率。

进一步的,将统一网关服务单独拆分出来成为一个独立服务,服务就可以单独部署,单独部署情况可以采用集群部署、负载均衡技术等进行实现,从而支持统一网关服务的集群部署、负载均衡,可提高请求处理性能,同样的,可以支持动态SQL工厂类的集群部署、负载均衡,提高请求处理性能。

上述数据查询方法,获取查询请求所请求的应用程序接口的配置信息,依据配置信息及查询请求中的查询参数构建查询语句,通过在配置信息中的设置数据源类型进行查询语句的构建,可以使得查询方法支持多种数据源类型,并且支持数据源的动态配置。

本申请的数据查询方法可以配置数据表、数据库视图、自定义SQL作为应用程序接口的数据源,通过自定义SQL还可以支持多表联合查询作为接口的返回数据。

图2为本申请实施例中提供一种数据查询装置200,如图2所示,所述数据查询装置200包括:

接收模块210,用于接收查询请求,依据所述查询请求中的查询参数构建查询变量;

获取模块220,用于获取所述查询请求对应的应用程序接口的配置信息,所述配置信息是预设的,包括所述应用程序接口关联的数据源、数据源类型;

查询模块230,用于依据所述查询变量和所述配置信息构建查询语句,将所述查询语句发送至应用程序接口以查询数据。

图3为本申请实施例中提供一种电子设备300,如图3所示,所述电子设备包括:处理器310和存储器320;所述处理器和所述存储器通过总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如上述实施例任一项所述的数据查询方法。

本申请实施例中还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序指令,所述计算机程序指令被计算机读取并运行时,执行如上述实施例中任一项所述的数据查询方法。

在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

需要说明的是,功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。

以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

技术分类

06120116576466