一种数据库脚本生成方法、装置、计算装置和存储介质与流程

文档序号:16999599发布日期:2019-03-02 01:40阅读:120来源:国知局
本发明涉及计算机数据库领域,尤其涉及一种数据库脚本生成方法、装置、计算装置和存储介质。
背景技术
::在现有软件项目开发过程中,存在一种应用对应多种数据库类型的问题,所以当一种应用开发完成以后,就要编写多种数据库脚本。由于数据库类型繁多,各类数据库之间还存在很大的差异,如果要编写多种数据库脚本,就需要同时掌握多种数据库知识,所以大大提高了对开发人员的要求以及增加了开发人员的工作量。由于数据库千差万别,同类数据库也是支持多种语言,以及多配置信息。所以虽然数据库脚本相同,但是,每种数据库之间在安装数据时也存在语言、配置信息的差异。当同一数据库建库脚本在同一类型但不同配置信息的数据库进行创建数据库,就会由于数据库配置信息的差异,导致脚本执行失败。技术实现要素:本申请实施例提供一种数据库脚本生成方法、装置、计算装置和存储介质,可以通过编写一套软件代码,及一种类型的数据库脚本便可连接所有类型版本的数据库进行交互,增加了代码复用性。第一方面,本申请实施例提供一种数据库脚本生成方法,该方法包括:获取原始数据库脚本文件以及目标数据库的描述信息,该描述信息用于表示数据库类型、数据库版本和配置信息;根据预先确定的原始数据库的描述信息以及目标数据库的描述信息,从预存的脚本差异集合中查找原始数据库和目标数据库之间的脚本差异;其中,脚本差异集合中存储有各种描述信息对应的数据库之间的脚本差异;根据原始数据库和目标数据库的脚本差异,确定原始数据库脚本文件中执行语句在目标数据库脚本文件中的执行语句;根据确定出的目标数据库脚本文件中的执行语句,生成目标数据库的脚本文件。进一步的,根据原始数据库和目标数据库的脚本差异,确定原始数据库脚本文件中执行语句在目标数据库脚本文件中的执行语句,具体包括:将原始数据库脚本文件中的执行语句保存到数组中;针对数组中保存的原始数据库脚本文件中的每条执行语句,在该执行语句中查找原始数据库采用的关键字,并分析出各执行语句的参数值;将执行语句所存储在的数组的下标编号、参数值和关键字对应存储到坐标列表中;其中,一条执行语句所存储在的数组的下标编号、参数值和关键字在坐标列表中生成一条记录;针对坐标列表中的每条记录,根据该条记录中的关键字确定该关键字在目标数据库中的语法结构,并根据该条记录中的参数值确定该参数在目标数据库中的参数值;根据每条记录中执行语句所存储在的数组的下标编号获取相应的执行语句,并根据该执行语句在目标数据库中的语法结构和参数值,确定该执行语句在目标数据库中的执行语句。进一步的,脚本差异包括:差异列表、通用关键字列表、以及,每种类型的数据库都具有独立的以下列表:特有关键字列表、数据类型列表、最小语法单元列表以及算法单元列表;其中,差异列表存储有各数据库的数据库的描述信息、数据类型标记以及数据库特有的关键字的关键字标记之间的对应关系;通用关键字列表存储有各数据库通用的关键字及对应的关键字标记;特有关键字列表存储有特有的关键字,及各关键字对应的关键字标记和各关键字对应的关键字语法序号;数据类型列表存储有数据类型、数据类型标记、数据类型转换算法序号之间的对应关系;最小语法单元列表存储有关键字语法序号、最小语法单元对应的关键字标记序列、最小语法单元的语法结构以及参数转换算法序号之间的对应关系;算法单元列表存储有数据类型算法序号及对应的算法,以及参数转换算法序号及对应的算法。进一步的,确定原始数据库的描述信息,具体包括:检索获取的原始数据库脚本文件中的关键字和数据类型;其中,检索的关键字为特有关键字列表中的关键字,检索的数据类型为数据类型列表中的数据类型;根据特有关键字列表确定检索出的关键字对应的关键字标记,根据数据类型列表确定检索出的数据类型对应的数据类型标记;根据差异列表将确定出的关键字标记和数据类型标记对应的描述信息确定为原始数据库的描述信息。进一步的,针对数组中保存的每条执行语句,在该执行语句中查找原始数据库采用的关键字,具体包括:针对数组中保存的每条执行语句,在该执行语句中查找原始数据库的特有关键字列表中的关键字;将执行语句所存储在的数组的下标编号、参数值和关键字对应存储到坐标列表中,具体包括:将查找到关键字的执行语句所存储在的数组的下标编号、参数值和关键字对应存储到坐标列表中。进一步的,针对坐标列表中的每条记录,根据该条记录中关键字确定该关键字在目标数据库中的语法结构,并根据该条记录中的参数值确定该参数在目标数据库中的参数值,具体包括:针对坐标列表中的每条记录执行:根据该记录中执行语句所存储在的数组的下标编号读取对应的执行语句;根据原始数据库的特有关键字列表和通用关键字列表查找该执行语句中的关键字;根据特有关键字列表和通用关键字列表确定查找到的各关键字对应的关键字标记;根据查找到的关键字的先后顺序,依次拼接关键字标记,得到对应执行语句的关键字标记序列;根据最小语法单元列表确定执行语句的关键字标记序列对应的最小语法单元的语法结构;以及,确定执行语句的关键字标记序列对应的参数转换算法标记;从算法单元列表中查找确定的参数转换算法标记对应的算法,并根据该算法将该记录中的参数值转换为适用于目标数据库的参数值。进一步的,根据最小语法单元列表确定执行语句的关键字标记序列对应的最小语法单元的语法结构;以及,确定执行语句的关键字标记序列对应的参数转换算法标记,具体包括:根据最小语法单元列表,确定执行语句的关键字标记序列中包含的最小语法单元对应的关键字标记序列;若执行语句的关键字标记序列中包含多个最小语法单元对应的关键字标记序列,则针对包含的每个关键字标记序列从最小语法单元列表中查找该关键字标记序列对应的最小语法单元的语法结构及对应的参数转换算法标记。进一步的,所述方法还包括:根据原始数据库的数据类型列表获取将原始数据库的数据类型转换到目标数据库的数据类型的数据类型转换算法标记;根据各执行语句在目标数据库中的语法结构和参数值,确定原始数据库脚本文件中的执行语句在目标数据库中的执行语句,具体包括:从算法单元列表中查找确定的数据类型转换算法标记对应的算法,并根据该算法将该记录中的数据类型转换为适用于目标数据库的数据类型;根据各执行语句在目标数据库中的语法结构、参数值和数据类型,确定原始数据库脚本文件中的执行语句在目标数据库中的执行语句。进一步的,针对坐标列表中的每条记录,根据该条记录中的关键字确定该关键字在目标数据库中的语法结构,并根据该条记录中的参数值确定该参数在目标数据库中的参数值之前,所述方法还包括:依序读取数组中保存的各执行语句,若该执行语句所存储在的数组的下标编号存储在坐标列表中,则执行针对坐标列表中的每条记录,根据该条记录中关键字确定该关键字在目标数据库中的语法结构,并根据该条记录中的参数值确定该参数在目标数据库中的参数值的操作;若该执行语句所存储在的数组的下标编号未存储在坐标列表中,则将该执行语句确定为在目标数据库中对应的执行语句。第二方面,本申请还提供一种数据库脚本生成装置,该装置包括:获取模块,用于获取原始数据库脚本文件以及目标数据库的描述信息,该描述信息用于表示数据库类型、数据库版本和配置信息;确定差异模块,用于根据预先确定的原始数据库的描述信息以及目标数据库的描述信息,从预存的脚本差异集合中查找原始数据库和目标数据库之间的脚本差异;其中,脚本差异集合中存储有各种描述信息对应的数据库之间的脚本差异;转换模块,用于根据原始数据库和目标数据库的脚本差异,确定原始数据库脚本文件中执行语句在目标数据库脚本文件中的执行语句;生成模块,用于根据确定出的目标数据库脚本文件中的执行语句,生成目标数据库的脚本文件。进一步的,转换模块包括:保存单元,用于将原始数据库脚本文件中的执行语句保存到数组中;分析单元,用于针对数组中保存的每条执行语句,在该执行语句中查找原始数据库采用的关键字,并分析出各执行语句的参数值;生成坐标列表单元,用于将执行语句所存储在的数组的下标编号、参数值和关键字对应存储到坐标列表中;其中,一条执行语句所存储在的数组的下标编号、参数值和关键字在坐标列表中生成一条记录;确定语法结构与参数值单元,用于针对坐标列表中的每条记录,根据该条记录中的关键字确定该关键字在目标数据库中的语法结构,并根据该条记录中的参数值确定该参数在目标数据库中的参数值;转换执行语句单元,用于根据各执行语句在目标数据库中的语法结构和参数值,确定原始数据库脚本文件中的执行语句在目标数据库中的执行语句。进一步的,脚本差异包括差异列表、通用关键字列表、以及,每种类型的数据库都具有独立的以下列表:特有关键字列表、数据类型列表、最小语法单元列表以及算法单元列表;其中,差异列表存储有各数据库的数据库的描述信息、数据类型标记以及数据库特有的关键字的关键字标记之间的对应关系;通用关键字列表存储有各数据库通用的关键字及对应的关键字标记;特有关键字列表存储有特有的关键字,及各关键字对应的关键字标记和各关键字对应的关键字语法序号;数据类型列表存储有数据类型、数据类型标记、数据类型转换算法序号之间的对应关系;最小语法单元列表存储有关键字语法序号、最小语法单元对应的关键字标记序列、最小语法单元的语法结构以及参数转换算法序号之间的对应关系;算法单元列表存储有数据类型算法序号及对应的算法,以及参数转换算法序号及对应的算法。进一步的,确定差异模块包括:检索单元,用于检索获取的原始数据库脚本文件中的关键字和数据类型;其中,检索的关键字为特有关键字列表中的关键字,检索的数据类型为数据类型列表中的数据类型;标记单元,用于根据特有关键字列表确定检索出的关键字对应的关键字标记,根据数据类型列表确定检索出的数据类型对应的数据类型标记;确定原始数据库单元,用于根据差异列表将确定出的关键字标记和数据类型标记对应的描述信息确定为原始数据库的描述信息。进一步的,分析单元包括:分析特有关键字子单元,用于针对数组中保存的每条执行语句,在该执行语句中查找原始数据库的特有关键字列表中的关键字;生成坐标列表单元包括:生成坐标列表子单元,用于将查找到关键字的执行语句所存储在的数组的下标编号、参数值和关键字对应存储到坐标列表中。进一步的,确定语法结构与参数值单元包括:读取的执行语句子单元,用于针对坐标列表中的每条记录执行:根据该记录中执行语句所存储在的数组的下标编号读取对应的执行语句;查找关键字子单元,用于根据原始数据库的特有关键字列表和通用关键字列表查找该执行语句中的关键字;查找关键字标记子单元,用于根据特有关键字列表和通用关键字列表确定查找到的各关键字对应的关键字标记;获取关键字标记序列子单元,用于根据查找到的关键字的先后顺序,依次拼接关键字标记,得到对应执行语句的关键字标记序列;确定语法结构与参数转换算法标记子单元,用于根据最小语法单元列表确定执行语句的关键字标记序列对应的最小语法单元的语法结构;以及,确定执行语句的关键字标记序列对应的参数转换算法标记;转换参数子单元,用于从算法单元列表中查找确定的参数转换算法标记对应的算法,并根据该算法将该记录中的参数值转换为适用于目标数据库的参数值。进一步的,确定语法结构与参数转换算法标记子单元用于根据最小语法单元列表,确定执行语句的关键字标记序列中包含的最小语法单元对应的关键字标记序列;若执行语句的关键字标记序列中包含多个最小语法单元对应的关键字标记序列,则针对包含的每个关键字标记序列从最小语法单元列表中查找该关键字标记序列对应的最小语法单元的语法结构及对应的参数转换算法标记。进一步的,该装置还包括:获取数据类型转换算法标记模块,用于根据原始数据库的数据类型列表获取将原始数据库的数据类型转换到目标数据库的数据类型的数据类型转换算法标记;转换执行语句单元包括:数据类型转换子单元,用于从算法单元列表中查找确定的数据类型转换算法标记对应的算法,并根据该算法将该记录中的数据类型转换为适用于目标数据库的数据类型;确定执行语句子单元,用于根据各执行语句在目标数据库中的语法结构、参数值和数据类型,确定原始数据库脚本文件中的执行语句在目标数据库中的执行语句。进一步的,该装置还包括:读取执行语句模块,用于在确定语法结构与参数值单元针对坐标列表中的每条记录,根据该条记录中的关键字确定该关键字在目标数据库中的语法结构,并根据该条记录中的参数值确定该参数在目标数据库中的参数值之前,依序读取数组中保存的各执行语句,若该执行语句所存储在的数组的下标编号存储在坐标列表中,则执行针对坐标列表中的每条记录,根据该条记录中关键字确定该关键字在目标数据库中的语法结构,并根据该条记录中的参数值确定该参数在目标数据库中的参数值的操作;确定执行语句模块,用于若该执行语句所存储在的数组的下标编号未存储在坐标列表中,则将该执行语句确定为在目标数据库中对应的执行语句。第三方面,本申请另一实施例还提供了一种计算装置,包括至少一个处理器;以及;与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本申请实施例提供的一种数据库脚本生成方法。第四方面,本申请另一实施例还提供了一种计算机存储介质,其中,所述计算机存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行本申请实施例中的一种数据库脚本生成方法。本申请实施例提供的一种数据库脚本生成方法、装置、计算装置和存储介质,本申请实施中提供的是基于目标数据库配置信息来生成建库脚本,因此生成的数据脚本是符合真实生产环境的数据库脚本,因此不会存在脚本执行失败的问题。本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。附图说明此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:图1为本申请实施例中数据库脚本生成方法流程示意图;图2为本申请实施例中各列表关联示意图;图3为本申请实施例中数据库脚本生成结构示意图;图4为根据本申请实施方式的计算装置的结构示意图。具体实施方式为了可以只编写一种类型的数据库脚本便可连接所有类型版本的数据库进行交互,本申请实施例中提供一种数据库脚本生成方法及装置。为了更好的理解本申请实施例提供的技术方案,这里对该方案一些名词和基本原理做以下简单说明:1、涉及的名词:数据库描述信息:数据库描述信息用于表示数据库类型、数据库版本以及配置信息。配置信息:配置信息中包含数据类型。本申请实施例中执行脚本的不同主要是配置信息中的数据类型不同导致的,所以后文中配置信息的不同导致的执行脚本差异采用数据类型不同来表示。最小语法单元:最小语法单元表示可以完成最小功能点的语法,例如完成分页功能语法。2、原理说明;数据库之间脚本的差异主要取决于各数据库采用的关键字、数据类型、语法结构等。不同类型的数据库或者同一类型但不同版本或不同配置的数据库之间也会由于配置信息的不同导致脚本文件会有些许差异。为了实现代码复用,尽可能的减少开发成本、本申请实施例中仅需要原始数据库的脚本文件,生成目标数据库的脚本文件。其原理是,根据原始数据库和目标数据库之间的脚本差异来生成。由于脚本差异是涵盖了数据库类型、数据库版本和配置信息不同造成的差异,所以针对任一数据库只要前期统计脚本差异,后期便可以根据脚本差异生成目标数据库的脚本文件。例如,脚本差异中的语法结构差异可以通过差异列表及最小语法单元列表体现出来,那么转换时,只需要根据语法结构差异,将原始数据库的脚本文件相应执行语句的语法按照目标数据库相同功能的语法进行组织即可。所以,本申请实施例基于脚本差异,可以实现将原始数据库的脚本文件转换为任意需要的数据库的脚本文件。从而大大减少对开发人员的要求以及开发人员的工作量,同时,也能够对同一类型但不同配置信息的数据库仍可以实现转换,并不会由于数据库配置信息的差异,导致脚本执行失败。下面结合参照附图对本申请实施例提供的一种数据库脚本生成方法作进一步说明。图1为数据库脚本生成方法的流程示意图,包括以下步骤:步骤101:获取原始数据库脚本文件以及目标数据库的描述信息,该描述信息用于表示数据库类型、数据库版本和配置信息。本申请实施例中,原始数据库脚本就是开发人员针对某一种数据库开发的脚本。获取原始数据库的脚本文件时,具体可实施为通过io流的读操作从脚本文件中读取。目标数据库脚本是用于目标数据库的脚本。目标数据库脚本可以通过原始数据库脚本得到。本申请实施例中生成目标数据库的脚本时,只需获取目标数据库的类型、版本和配置信息即可。具体实施为采用现有的数据库连接技术连接目标数据库,通过查询指令,以及读取数据库配置文件获取目标数据的类型信息,版本信息,以及配置信息。步骤102:根据预先确定的原始数据库的描述信息以及目标数据库的描述信息,从预存的脚本差异集合中查找原始数据库和目标数据库之间的脚本差异;其中,脚本差异集合中存储有各种描述信息对应的数据库之间的脚本差异。步骤103:根据原始数据库和目标数据库的脚本差异,确定原始数据库脚本文件中执行语句在目标数据库脚本文件中的执行语句。步骤104:根据确定出的目标数据库脚本文件中的执行语句,生成目标数据库的脚本文件。本申请实施例中,具体实施时,脚本差异中包括原始数据库采用的关键字和目标数据库采用的关键字的第一对应关系;原始数据库的数据类型和目标数据库的数据类型之间的第二对应关系;原始数据库的语法结构与目标数据库的语法结构之间的第三对应关系。基于上述三种对应关系,根据原始数据库和目标数据库的脚本差异,确定原始数据库脚本文件中执行语句在目标数据库脚本文件中的执行语句,具体可实施为包括步骤a1-a5:步骤a1:将原始数据库脚本文件中的执行语句保存到数组中。步骤a2:针对数组中保存的每条执行语句,在该执行语句中查找原始数据库采用的关键字,并根据第一对应关系确定各执行语句在目标数据库采用的关键字;以及;步骤a3:针对数组中保存的每条执行语句,确定各执行语句的数据类型,并根据第二对应关系确定各执行语句在目标数据库的数据类型;以及;步骤a4:针对数组中保存的每条执行语句,根据原始数据库采用的关键字确定各执行语句的语法结构,并根据第三对应关系确定各执行语句在目标数据库的语法结构。步骤a5:根据各执行语句在目标数据库采用的语法结构以及数据类型,生成各执行语句在目标数据库脚本文件中的执行语句。其中,具体实施时,步骤a2-步骤a4之间的执行顺序不受限。进一步的,具体实施时,可以根据如下步骤b1-b4来实现不同数据库间的脚本转换:步骤b1:将原始数据库脚本文件中的执行语句保存到数组中。步骤b2:针对数组中保存的每条执行语句,在该执行语句中查找原始数据库采用的关键字,并分析出各执行语句的参数值。步骤b3:将执行语句所存储在的数组的下标编号、参数值和关键字对应存储到坐标列表中;其中,一条执行语句所存储在的数组的下标编号、参数值和关键字在坐标列表中生成一条记录。步骤b4:针对坐标列表中的每条记录,根据该条记录中关键字确定该关键字在目标数据库中的语法结构,并根据该条记录中的参数值确定该参数在目标数据库中的参数值。步骤b5:根据每条记录中的执行语句所存储在的数组的下标编号获取相应的执行语句,并根据该执行语句在目标数据库中的语法结构和参数值,确定该执行语句在目标数据库中的执行语句。这样,根据步骤b1-步骤b5,可以将原始数据库脚本文件中的执行语句保存到数组中,通过生成坐标列表来对保存到数组中的执行语句进行转换,转换时根据坐标列表即可快速的读取相应的执行语句,能够节省了转换的时间。本申请实施例中,脚本差异中包括差异列表、通用关键字列表、以及,每种类型的数据库都具有独立的以下列表:特有关键字列表、数据类型列表、最小语法单元列表以及算法单元列表,以上所述列表对应关系如图2。其中,如表1所示,差异列表存储有各数据库的数据库的描述信息、数据类型标记以及数据库特有的关键字的关键字标记之间的对应关系;如表2所示,通用关键字列表存储有各数据库通用的关键字及对应的关键字标记;如表3、表4所示,特有关键字列表存储有特有的关键字,及各关键字对应的关键字标记和各关键字对应的关键字语法序号;如表5、表6所示,数据类型列表存储有数据类型、数据类型标记、数据类型转换算法序号之间的对应关系;如表7、表8所示,最小语法单元列表存储有关键字语法序号、最小语法单元对应的关键字标记序列、最小语法单元的语法结构以及参数转换算法序号之间的对应关系;如表9、表10所示,算法单元列表存储有数据类型算法序号及对应的算法,以及参数转换算法序号及对应的算法。需要说明的是,本申请实施例中提供的各种表仅用于说明本申请实施例而不对此进行限定。表1差异列表数据库关键字标记数据类型标记mysqllm_bigintoraclero_number。。。。。。。。。表2通用关键字列表关键字关键字标记selectsfromfwherew。。。。。。表3特有关键字列表1mysql关键字标记关键字关键字语法单元序号llimitl001。。。。。。。。。表4特有关键字列表2oracle关键字标记关键字关键字语法单元序号rrownumr001。。。。。。。。。表5数据类型列表1mysql数据类型标记数据类型算法单元序号m_bigintbigintls001。。。。。。。。。表6数据类型列表2oracle数据类型标记数据类型算法单元序号o_numbernumberrs001。。。。。。。。。表7最小语法单元列表1mysql表8最小语法单元列表2oracle表9算法单元列表1mysql表10算法单元列表2oracle如图2所示,下面对各列表之间如何互相关联进行说明,如:关键字标记可以将差异列表与特有关键字列表相关联,数据类型标记可以将差异列表与数据类型列表相关联,关键字语法单元序号可以将最小语法单元列表与特有关键字列表相关联,算法单元序号可以将最小语法单元列表与算法单元列表相关联,同时也可以将数据类型列表与算法单元列表相关联,差异列表可以把不同数据库之间关联起来。这样,针对每种数据库(即数据库类型、版本或配置信息不同的数据库),可以通过该数据库独立的特有关键字列表、数据类型列表、最小语法单元列表以及算法单元列表为该数据库建立信息,并将其与其他数据库的差异更新到差异列表中。这样,对于各列表的维护和更新,以数据库为单位,操作简单。此外,可以通过容易得到的关键字与数据类型就可以将最小单元语法单元与算法单元关联起来,同时通过差异列表可以将原始数据库与目标数据库关联起来,也即可以通过原始数据库与目标数据库之间的特有关键字和数据类型的差异,将原始数据库的脚本文件转换成目标数据库的脚本文件。进一步的,本申请实施例中,原始数据库的描述信息可以同目标数据库的描述信息获取方式类似,即通过读取原始数据库的信息获得。当然,具体实施时还可以通过以下方法获得,包括如下步骤c1-步骤c3:步骤c1:检索获取的原始数据库脚本文件中的关键字和数据类型;其中,检索的关键字为特有关键字列表中的关键字,检索的数据类型为数据类型列表中的数据类型。步骤c2:根据特有关键字列表确定检索出的关键字对应的关键字标记,根据数据类型列表确定检索出的数据类型对应的数据类型标记。步骤c3:根据差异列表将确定出的关键字标记和数据类型标记对应的描述信息确定为原始数据库的描述信息。这样,通过步骤c1-步骤c3,即使不知道原始数据库的描述信息,或者即使无法连接原始数据库,本申请实施例中仅通过一个脚本文件既可以确定原始数据库的描述信息。进一步的,本申请实施例中,根据特有关键字列表,对原始数据库脚本文件中的每条执行语句查找原始数据库采用的关键字,具体可实施为:针对数组中保存的每条执行语句,在该执行语句中查找原始数据库的特有关键字列表中的关键字。本申请实施例中,将每一条执行语句所存储在的数组的下标编号、参数值和关键字对应存储到坐标列表中,具体可实施为:将查找到关键字的执行语句所存储在的数组的下标编号、参数值和关键字对应存储到坐标列表中。这样,根据特有关键字列表得到的关键字,将具有关键字的执行语句所存储在的数组的下标编号、参数值和关键字对应存储到坐标列表中,也即坐标列表中仅存储需要转换的执行语句的信息,减少坐标列表的信息量,可以提高转换的效率。进一步的,为了便于根据上述设计的表,确定语法结构和参数值,本申请实施例中,根据特有关键字列表和通用关键字列表以及最小语法单元列表,对坐标列表中的每条记录中的关键字确定该关键字在目标数据库中的语法结构,并根据该条记录中的参数值确定该参数在目标数据库中的参数值,可实施为针对坐标列表中的每条记录执行如下步骤d1-步骤d6:步骤d1:根据该记录中的执行语句所存储在的数组的下标编号读取对应的执行语句。步骤d2:根据原始数据库的特有关键字列表和通用关键字列表查找该执行语句中的关键字。步骤d3:根据特有关键字列表和通用关键字列表确定查找到的各关键字对应的关键字标记。步骤d4:根据查找到的关键字的先后顺序,依次拼接关键字标记,得到对应执行语句的关键字标记序列。根据特有关键字列表和通用关键字列表将该条记录中的关键字找到,并根据特有关键字列表和通用关键字列表找到关键字对应的关键字标记,并将关键字出现的次数放到关键字标记后。按照该条记录的关键字顺序,将所有关键字标记进行依次拼接,组成一个关键字标记序列。步骤d5:根据最小语法单元列表确定执行语句的关键字标记序列对应的最小语法单元的语法结构;以及,确定执行语句的关键字标记序列对应的参数转换算法标记;步骤d6:从算法单元列表中查找确定的参数转换算法标记对应的算法,并根据该算法将该记录中的参数值转换为适用于目标数据库的参数值。这样,通过关键字标记序列即可唯一确定最小语法单元的语法结构,以及根据算法单元列表把原始数据库的参数值转换为适用于目标数据库的参数值。实现时操作方便。进一步的,本申请实施例中步骤d5,根据最小语法单元列表确定执行语句的关键字标记序列对应的最小语法单元的语法结构;以及,确定执行语句的关键字标记序列对应的参数转换算法标记,具体可实施为:根据最小语法单元列表,确定执行语句的关键字标记序列中包含的最小语法单元对应的关键字标记序列;若执行语句的关键字标记序列中包含多个最小语法单元对应的关键字标记序列,则针对包含的每个关键字标记序列从最小语法单元列表中查找该关键字标记序列对应的最小语法单元的语法结构及对应的参数转换算法标记。这样,即使该执行语句为嵌套的语法结构,通过最小语法单元列表,仍可以将原始数据库脚本转换为目标数据库脚本。进一步的,本申请实施例中,算法转换不仅可以转换参数算法,同样可以转换数据类型算法,具体可实施为:根据原始数据库的数据类型列表获取将原始数据库的数据类型转换到目标数据库的数据类型的数据类型转换算法标记。本申请实施例中,根据各执行语句在目标数据库中的语法结构和参数值,确定原始数据库脚本文件中的执行语句在目标数据库中的执行语句,具体包括:从算法单元列表中查找确定的数据类型转换算法标记对应的算法,并根据该算法将该记录中的数据类型转换为适用于目标数据库的数据类型;根据各执行语句在目标数据库中的语法结构、参数值和数据类型,确定原始数据库脚本文件中的执行语句在目标数据库中的执行语句。这样,通过算法单元列表,可以将原始数据库的数据类型转换为目标数据库的数据类型。进一步的,本申请实施例中,针对坐标列表中的每条记录,根据该条记录中的关键字确定该关键字在目标数据库中的语法结构,并根据该条记录中的参数值确定该参数在目标数据库中的参数值之前,具体可实施为:依序读取数组中保存的各执行语句,若该执行语句所存储在的数组的下标编号存储在坐标列表中,则执行针对坐标列表中的每条记录,根据该条记录中关键字确定该关键字在目标数据库中的语法结构,并根据该条记录中的参数值确定该参数在目标数据库中的参数值的操作;若该执行语句所存储在的数组的下标编号未存储在坐标列表中,则将该执行语句确定为在目标数据库中对应的执行语句。这样,只转换坐标列表中的执行语句,可以提高转换效率。下面通过简单的实施例对本发明实施例中数据库脚本生成方法进行详细说明。假设原始数据库为mysql数据库,目标数据库为oracle数据库。若mysql数据库脚本中存在三条执行语句,分别为:(1)select*fromtable_namelimit10,5;(2)select*fromtable_name1wherename=zhangsan;(3)select*fromtable_name2wherename=lisi。首先获取此数据库的脚本文件,并将这三条执行语句分别保存在a[0]、a[1]、a[2]中。a[0]、a[1]、a[2]均为存储执行语句的数组,[0]、[1]、[2]均为数组的下标编号。如表3和表5,根据原始数据库特有关键字列表、数据类型列表对脚本文件进行检索,找到此数据库的特有关键字limit以及数据类型bigint,并找到关键字标记l以及数据类型标记m_bigint,根据差异列表(此时差异列表仅包含原始数据库的信息)找到此数据库为mysql数据库。如表11。表11差异列表数据库关键字标记数据类型标记mysqllm_bigint读取目标数据库描述信息,并根据原始数据库与目标数据库获取到合适的差异列表(此时差异列表包含原始数据库信息与目标数据库信息),找到mysql数据库与oracle数据库之间的差异。如表1。根据特有关键字列表,分别对a[0]、a[1]、a[2]进行检索。发现在a[0]中存在特有关键字列表中的特有关键字limit,将a[0]坐标值(即所存储在的数组a[0]的下标编号[0]),a[0]参数值(参数值为table_name和10,5),特有关键字(limit),保存到坐标列表中;而a[1]、a[2]中并没有特有关键字,因此不保存在坐标列表中。如表2和表3,根据特有关键字列表和通用关键字列表,找到保存在坐标列表中的a[0]中的执行语句中的关键字,即select、from、limit,并根据特有关键字列表和通用关键字列表找到关键字对应的关键字标记:s、f、l,并将关键字出现的次数放到关键字标记后:s1、f1、l1;,按照该条记录的关键字顺序,将所有关键字标记进行依次拼接,组成一个关键字标记序列:s10+f10+l10。如表7,将此关键字标记序列与最小语法单元中的最小语法单元语法结构标记比对,找到与关键字标记序列对应的最小语法单元select*fromtable_namelimitvalue1,value2和对应的参数转换算法标记ls001。如表9,根据算法单元列表找到与参数转换算法标记ls001对应的算法,并根据差异列表找到目标数据库oracle的关键字标记r及数据类型标记o_number。如表4、表6、表8和表10,根据目标数据库的特有关键字列表、数据类型列表、最小语法单元列表和算法单元列表之间的关联,找到目标数据库oracle的最小语法单元和算法:select*from(selecta.*,rownumrnfrom(select*fromtable_name)a)wherernbetweenvalue1andvalue2。将a[0]中的语句替换为目标数据库oracle中的语句,最后按照a[0]、a[1]、a[2]的顺序输出。当输出a[0]时候,由于a[0]在坐标列表中,故此输出替换后的a[0]中的语句。a[1]、a[2]没有在坐标列表中存在,所以原样输出。输出顺序a[0]、a[1]、a[2],输出结果如下:(1)select*from(selecta.*,rownumrnfrom(select*fromtable_name)a)wherernbetween11and15;(2)select*fromtable_name1wherename=zhangsan;(3)select*fromtable_name2wherename=lisi.基于相同的发明构思,本申请实施例还提供一种数据库脚本生成装置。如图3所示,该装置包括:获取模块301,用于获取原始数据库脚本文件以及目标数据库的描述信息,该描述信息用于表示数据库类型、数据库版本和配置信息;确定差异模块302,用于根据预先确定的原始数据库的描述信息以及目标数据库的描述信息,从预存的脚本差异集合中查找原始数据库和目标数据库之间的脚本差异;其中,脚本差异集合中存储有各种描述信息对应的数据库之间的脚本差异;转换模块303,用于根据原始数据库和目标数据库的脚本差异,确定原始数据库脚本文件中执行语句在目标数据库脚本文件中的执行语句;生成模块304,用于根据确定出的目标数据库脚本文件中的执行语句,生成目标数据库的脚本文件。进一步的,转换模块303包括:保存单元,用于将原始数据库脚本文件中的执行语句保存到数组中;分析单元,用于针对数组中保存的每条执行语句,在该执行语句中查找原始数据库采用的关键字,并分析出各执行语句的参数值;生成坐标列表单元,用于将执行语句所存储在的数组的下标编号、参数值和关键字对应存储到坐标列表中;其中,一条执行语句所存储在的数组的下标编号、参数值和关键字在坐标列表中生成一条记录;确定语法结构与参数值单元,用于针对坐标列表中的每条记录,根据该条记录中的关键字确定该关键字在目标数据库中的语法结构,并根据该条记录中的参数值确定该参数在目标数据库中的参数值;转换执行语句单元,用于根据各执行语句在目标数据库中的语法结构和参数值,确定原始数据库脚本文件中的执行语句在目标数据库中的执行语句。进一步的,脚本差异包括差异列表、通用关键字列表、以及,每种类型的数据库都具有独立的以下列表:特有关键字列表、数据类型列表、最小语法单元列表以及算法单元列表;其中,差异列表存储有各数据库的数据库的描述信息、数据类型标记以及数据库特有的关键字的关键字标记之间的对应关系;通用关键字列表存储有各数据库通用的关键字及对应的关键字标记;特有关键字列表存储有特有的关键字,及各关键字对应的关键字标记和各关键字对应的关键字语法序号;数据类型列表存储有数据类型、数据类型标记、数据类型转换算法序号之间的对应关系;最小语法单元列表存储有关键字语法序号、最小语法单元对应的关键字标记序列、最小语法单元的语法结构以及参数转换算法序号之间的对应关系;算法单元列表存储有数据类型算法序号及对应的算法,以及参数转换算法序号及对应的算法。进一步的,确定差异模块302包括:检索单元,用于检索获取的原始数据库脚本文件中的关键字和数据类型;其中,检索的关键字为特有关键字列表中的关键字,检索的数据类型为数据类型列表中的数据类型;标记单元,用于根据特有关键字列表确定检索出的关键字对应的关键字标记,根据数据类型列表确定检索出的数据类型对应的数据类型标记;确定原始数据库单元,用于根据差异列表将确定出的关键字标记和数据类型标记对应的描述信息确定为原始数据库的描述信息。进一步的,分析单元包括:分析特有关键字子单元,用于针对数组中保存的每条执行语句,在该执行语句中查找原始数据库的特有关键字列表中的关键字;生成坐标列表单元包括:生成坐标列表子单元,用于将查找到关键字的执行语句所存储在的数组的下标编号、参数值和关键字对应存储到坐标列表中。进一步的,确定语法结构与参数值单元包括:读取的执行语句子单元,用于针对坐标列表中的每条记录执行:根据该记录中的执行语句所存储在的数组的下标编号读取对应的执行语句;查找关键字子单元,用于根据原始数据库的特有关键字列表和通用关键字列表查找该执行语句中的关键字;查找关键字标记子单元,用于根据特有关键字列表和通用关键字列表确定查找到的各关键字对应的关键字标记;获取关键字标记序列子单元,用于根据查找到的关键字的先后顺序,依次拼接关键字标记,得到对应执行语句的关键字标记序列;确定语法结构与参数转换算法标记子单元,用于根据最小语法单元列表确定执行语句的关键字标记序列对应的最小语法单元的语法结构;以及,确定执行语句的关键字标记序列对应的参数转换算法标记;转换参数子单元,用于从算法单元列表中查找确定的参数转换算法标记对应的算法,并根据该算法将该记录中的参数值转换为适用于目标数据库的参数值。进一步的,确定语法结构与参数转换算法标记子单元用于根据最小语法单元列表,确定执行语句的关键字标记序列中包含的最小语法单元对应的关键字标记序列;若执行语句的关键字标记序列中包含多个最小语法单元对应的关键字标记序列,则针对包含的每个关键字标记序列从最小语法单元列表中查找该关键字标记序列对应的最小语法单元的语法结构及对应的参数转换算法标记。进一步的,该装置还包括:获取数据类型转换算法标记模块,用于根据原始数据库的数据类型列表获取将原始数据库的数据类型转换到目标数据库的数据类型的数据类型转换算法标记;转换执行语句单元包括:数据类型转换子单元,用于从算法单元列表中查找确定的数据类型转换算法标记对应的算法,并根据该算法将该记录中的数据类型转换为适用于目标数据库的数据类型;确定执行语句子单元,用于根据各执行语句在目标数据库中的语法结构、参数值和数据类型,确定原始数据库脚本文件中的执行语句在目标数据库中的执行语句。进一步的,该装置还包括:读取执行语句模块,用于在确定语法结构与参数值单元针对坐标列表中的每条记录,根据该条记录中的关键字确定该关键字在目标数据库中的语法结构,并根据该条记录中的参数值确定该参数在目标数据库中的参数值之前,依序读取数组中保存的各执行语句,若该执行语句所存储在的数组的下标编号存储在坐标列表中,则执行针对坐标列表中的每条记录,根据该条记录中关键字确定该关键字在目标数据库中的语法结构,并根据该条记录中的参数值确定该参数在目标数据库中的参数值的操作;确定执行语句模块,用于若该执行语句所存储在的数组的下标编号未存储在坐标列表中,则将该执行语句确定为在目标数据库中对应的执行语句。在介绍了本申请示例性实施方式的适用于数据库脚本生成方法及装置之后,接下来,介绍根据本申请的另一示例性实施方式的计算装置。所属
技术领域
:的技术人员能够理解,本申请的各个方面可以实现为系统、方法或程序产品。因此,本申请的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。在一些可能的实施方式中,根据本申请的实施例,计算装置可以至少包括至少一个处理器、以及至少一个存储器。其中,存储器存储有程序代码,当程序代码被处理器执行时,使得处理器执行本说明书上述描述的根据本申请各种示例性实施方式的数据库脚本生成方法中的步骤101-104。下面参照图4来描述根据本申请的这种实施方式的计算装置40。图4显示的计算装置40仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。如图4所示,计算装置40以通用计算装置的形式表现。计算装置40的组件可以包括但不限于:上述至少一个处理器41、上述至少一个存储器42、连接不同系统组件(包括存储器42和处理器41)的总线43。总线43表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器、外围总线、处理器或者使用多种总线结构中的任意总线结构的局域总线。存储器42可以包括易失性存储器形式的可读介质,例如随机存取存储器(ram)421和/或高速缓存存储器422,还可以进一步包括只读存储器(rom)423。存储器42还可以包括具有一组(至少一个)程序模块424的程序/实用工具425,这样的程序模块424包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。计算装置40也可以与一个或多个外部设备44(例如指向设备等)通信,还可与一个或者多个使得用户能与计算装置40交互的设备通信,和/或与使得该计算装置40能与一个或多个其它计算装置进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口45进行。并且,计算装置40还可以通过网络适配器46与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器46通过总线43与用于计算装置40的其它模块通信。应当理解,尽管图中未示出,可以结合计算装置40使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。在一些可能的实施方式中,本申请提供的数据库脚本生成方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在计算机设备上运行时,程序代码用于使计算机设备执行本说明书上述描述的根据本申请各种示例性实施方式的数据库脚本生成方法中的步骤,执行如图1中所示的步骤101-104。程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。本申请的实施方式的用于系统权限开启的程序产品可以采用便携式紧凑盘只读存储器(cd-rom)并包括程序代码,并可以在计算装置上运行。然而,本申请的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、rf等等,或者上述的任意合适的组合。可以以一种或多种程序设计语言的任意组合来编写用于执行本申请操作的程序代码,程序设计语言包括面向对象的程序设计语言—诸如java、c++等,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算装置上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算装置上部分在远程计算装置上执行、或者完全在远程计算装置或服务器上执行。在涉及远程计算装置的情形中,远程计算装置可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算装置,或者,可以连接到外部计算装置(例如利用因特网服务提供商来通过因特网连接)。应当注意,尽管在上文详细描述中提及了装置的若干单元或子单元,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。此外,尽管在附图中以顺序描述了本申请方法的操作,但是,这并非要求或者暗示必须按照该顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1