一种访问不同类型关系型数据库的方法

文档序号:6481212阅读:189来源:国知局
专利名称:一种访问不同类型关系型数据库的方法
技术领域
本发明涉及关系数据库领域,特别是涉及 -种应用程序釆用无差别方式访问 多种不同类型、版本关系型数据库的方法。
背景技术
目前,关系型数据库存储是企业储存及数据应用的主流方式,流行的大型关
系型数据库有0racle、 SQL Server、 IBM DB2、 SyBase、 Informix等,而且每种 数据库一般存在多个正在使用的并行版本(例如Oracle 9i、 Oracle 10g)。众多 的关系数据库类型都遵循或支持一致的SQL语言标准(如ANSI/ISO的SQL99、 SQL92)。但各类数据库基于此标准扩展了一些非标准化的SQL,各类数据库的数 据类型定义不统一,对于相同功能的实现,各类数据库提供的函数、系统命令等 存在不一致的现象。甚至同一类型数据库的高、低版本之间在访问上也存在不一 致的现象(例如对XML的支持)。
对于面向企业应用的软件产品, 一般是数据密集型系统,其数据存储主要是 基于关系型数据库。根据市场、客户的需求,需要同时支持多种类型的关系型数 据库及版本,而上述数据库层面访问形式、方法上的差异,为企业应用在数据库
层面的开发带来额外的复杂性和工作量。
如果能够屏蔽多种类型数据库及版本的差异,对于企业应用在数据库层面的 开发提供统一的访问形式和方法,将有效的降低开发的复杂性,提高开发效率和 质量,而且当需要支持一种新的关系型数据库时,对上层应用可以透明。

发明内容
本发明的目的是提供一种访问不同类型关系型数据库的方法。 本发明的目的是按以下方式实现的,通过分析、识别不同类型、版本关系型数 据库的差异,针对差异进行封装以组件形式向外提供了一致的编程访问接口, 对SQL语句语法、各种数据库函数、命令等,统一调用标准和书写格式,屏蔽因 不同类型、版本关系型数据库造成的差异;内部按照数据库类型及版本进行分别 的针对性的实现。在屏蔽数据库类型、版本差异时,采用编程接口和SQL语法两
种方法进行封装。两种方法的混合使用,既可达到屏蔽数据库类型、版本差异的 效果,又可以使编程实现的复杂度降低
针对以上的问题解决方案,木发明公开的访问不同类型、版本的关系型数据库
的统一方法,包括如下歩骤1. 接收获取"数据访问接口"的请求及"数据访问配置项标识"参数;
2. 根据"数据访问配置项标识"获取相应配置项定义,根据配置项定义判断
3. 对应的数据库类型及版本,创建实现了特定类型、版本数据库访问的对象, 该对象实现了 "数据访问接口",将该对象以"数据访问接口"形式返M;
4. "数据访问接口"接收与特定数据库类型、版本无关的数据访问的方法调 用请求及方法参数;
5. "数据访问接口"根据特定的方法调用请求,将与特定数据库类型、版本 无关的请求转换为特定数据库类型、版本可执行的SQL语句。
6. 将转换后的针对特定数据库类型、版本的SQL语句发送至相应的目标数据库。
进一步,数据库访问过程中包括如下后续执行步骤
7. 目标数据库执行所述的SQL语句,返回执行结果。
对于步骤1中所述的"数据访问接口",是指封装数据库操作的统一编程接口, 用以屏蔽各类数据库在编程调用方面的差异,定义了访问数据库的操作标准。此 接口包含了 一组用于执行数据库操作的属性和方法。
对于步骤1中所述的"数据访问配置项标识",是基于XML的配置文件中的配 置小节的标识,可用于唯一标记^个"数据访问配置项"。每个"数据访问配 置项"描述的内容包括配置项标识、配置项名称、数据库类型、类型元数据、 数据库连接信息。其中"类型元数据"用于程序动态加载实现了 "数据访问接UI" 的特定类型、版本数据库访问的对象类型并创建对象的信息;其中"数据库连接 信息"是用于创建"数据库会话"的连接字符串描述。
如在微软.NET平台下应用,其中类型兀数据是指采用微软.NET平台的反射技 术,动态加载.NET程序集和类型的描述信息,包括类型全称、程序集名称、版本、 文化、公钥标记。其中数据库连接信息是基于微软公司AD0.NET技术对于各种数 据库连接串的定义,对于不同类型的数据库具体的连接串信息不同,般包括数 据源、用户名、密码以及其他的可配置的连接参数。详见msdn中对于各种数据库 连接串的具体描述。以上对于微软.NET平台的实现介绍,是为了便于理解,所述 的.NET应用并不限定本发明的保护范围。
(htt,p://msdn. microsoft, com,/zh-cii/librarv/system. data, idbconnection (en-us, VS. 71). aspx)。
对于歩骤2中所述的"实现特定类型、版本数据库访问的对象",该对象实 现了 "数据访问接口",是针对特定类型、版本的数据库进行访问操作的功能实 现。 —
对于步骤3中所述的方法的"请求参数", 一般包括SQL语句和SQL语句的
5中形参的实参。
对于歩骤3、 4中所述的"与特定数据库类型、版本无关",由两种规范性定 义来实现 一种是方法的规范性定义, 一种是SQL语句的规范性定义。对于方法 的规范性定义,是将在不同的数据库类型中实现差异较大的SQL语法以及函数等 采用一致的编程接口的形式进行封装,屏蔽其差异,在执行时由步骤2所述的"实 现特定类型、版本数据库访问的对象"进行具体的转换,形成特定类型、版本数 据库可执行的SQL;对于SQL语句的规范性定义,主要是针对不同数据库中SQL语
法的一些局部差异,采用约定好的规则字符串形式进行封装,屏蔽其差异,在执 行时由步骤2所述的"实现特定类型、版本数据库访问的对象"采用基于"自定 义表达式"解析、替换的方法将规范化的SQL语句替换为具体数据库上可执行的 SQL语句。
"自定义表达式",是一种自定义的可识别、可解析的表达式形式,其表达 的语法为UV:]I[F:] 〈expression〉),表达式总是以"{"开始,以"}"结束。 "V:"表示表达式为变量表达式,"F:"表示后表达式为函数表达式,默认为变 量表达式 。
<expression>::={variant|〈function>} ,〈function〉= {function—name(argument[,... n])}。
本发明的方法与现有技术相比,具有以下优点
在屏蔽数据库类型、版本差异时,采用编程接口和SQL语法两种方法进行封 装。采用编程接口的方式,主要是针对SQL语法差异较大的情况,这种情况很难 从SQL语法上进行统一,但采用编程接口就很容易形成一致的标准;而SQL语法 方式,主要是针对SQL语句中局部的差异进行封装,这时SQL语句主体结构是一 致的,仅仅在一些操作符、SQL函数上有差异,很容易用规则字符串来形成统一的 标准。两种方法的混合使用,既可达到屏蔽数据库类型、版本差异的效果,又可 以使编程实现的复杂度降低,而且相对于采用完全私有SQL语法定义并进行SQL 语法解析翻译的方式相比,更加轻量级,在执行效率上有明显的优势。


图1是本发明实施例一种访问不同类型关系型数据库的统一方法的流程图;
具体实施例方式
参照说明书附图对本发明的作以下详细地说明。
本发明的一种访问不同类型关系型数据库的方法,该方法是以下将通过对本 发明的优选实施例的详细描述,使本发明的上述目标、特征和优点更加清晰、易 懂。为了更容易理解本方法的实施方式,以两个示例SQL为例进行详细的说明。
不例1:
SQL Server: SELECT Substring(Code, 1, 3) FROM T WHERE ID = @plOracle: SELECT SubStr (Code, 1, 3) FROM T WHERE ID 二 pl
以上是在SQL开发中,从表T中获取指定ID为特定变量值行中的Code字段
的前三个字符,SQL Server和Oracle数据库的SQL差异如上所示。 采用本发明所示的统一封装如下
SQL: SELECT {F:SubStr(Code, 1, 3)} FROM T WHERE ID = {0} 上述SQL在执行时,将根据配置项匹配为特定的数据库执行对象,由该执行 对象对符合替换的文本进行正则表达式查找,根据花括号中的内容进行匹配和转 换,并替换原SQL文本中的花括号部分,最终得到在目标数据库上可执行的SQL 语句。
示例2:
SQL Server: ALTER TABLE T ALTER COLUMN C0L1 VARCHAR(IO) Oracle: ALTER TABLE T MODIFY COL1 VARCHAR(IO)
以上是在开发中,修改表T中的列C0L1的SQL, SQL Server和Oracle数据库 的SQL差异如上所示。
对于差异较大的SQL语句,不采用SQL语句兼容的方式,而系统中提供编程 接口的方式进行封装
C#: void AlterColumn (string tblName, string colName, string property);
定义的编程接口中,提供一个AlterColumn方法,用于修改数据库的字段属 性,参数有三个,分别是表名、字段名、和字段属性。对于本例的程序调用源代 码如下所示
C#: AlterColumn(〃T〃, 〃C0L1〃, 〃VARCHAR(10)〃);
以上的示例一与示例二分别说明了采用SQL规范和编程接口规范两种形式定 义数据库访问标准的方法,以屏蔽不同类型、版本数据库的访问差异性,对外提 供统一的访问形式。对于相同语义的SQL语句,如果在各种类型数据库定义上的 差异仅是局部语法表达的差别的,则采用SQL规范化的形式,使用自定义表达式 统一访问标准;对于相同语义的SQL语句,如果在各种类型数据库定义上的差异 较大,采用SQL规范化的形式难以统一的,则釆用编程接口规范化的形式。
本发明描述的方法,其目标是支持应用程序以无差别方式访问多种类型的关 系型数据库,避免程序中因数据库类型的差异而产生的程序分支,降低同时支持
多种类型数据库的开发繁琐程度,提高数据库开发的效率;当应用程序需在不同 类型数据库间进行迁移时,可保证应用程序不修改程序源代码。
优选的,本发明描述的方法,釆用SQL语法规范和编程接口相结合的混合方 式形成统一标准,是一种轻量级的封装形式,不需要进行SQL的语法、词法分析 过程,避免了在这方面的资源(CPU、内存等)消耗以及执行效率的损失。
权利要求
1.一种访问不同类型关系型数据库的方法,其特征在于,通过分析、识别不同类型、版本关系型数据库的差异,针对差异进行封装以组件形式向外提供了一致的编程访问接口,对SQL语句语法、各种数据库函数、命令,统一调用标准和书写格式,屏蔽因不同类型、版本关系型数据库造成的差异;内部按照数据库类型及版本进行分别的针对性的实现,在屏蔽数据库类型、版本差异时,采用编程接口和SQL语法两种方法进行封装,两种方法混合使用,既达到屏蔽数据库类型、版本差异的效果,又使编程实现的复杂度降低,具体访问步骤包括1)接收获取“数据访问接口”的请求,请求的参数为“数据访问配置项标识”;2)根据“数据访问配置项标识”,获取配置项以确定对应的数据库类型及版本,根据配置项创建实现了特定类型、版本数据库访问的对象,将该对象以“数据访问接口”形式返回;3)“数据访问接口”接收与特定数据库类型、版本无关的数据访问的方法调用请求及方法参数;4)“数据访问接口”根据特定的方法调用请求,将与特定数据库类型、版本无关的请求转换为特定数据库类型、版本可执行的SQL语句;5)将转换后的针对特定数据库类型、版本的SQL语句发送至相应的目标数据库;6)目标数据库执行所述的SQL语句,返回执行结果。
2、 根据权利要求1所述的方法,其特征在于,"数据访问接口"封装数据库 操作的统一编程接口,用以屏蔽各类数据库在编程调用方面的差异,定义了访问 数据库的操作标准。此接口包含了一组用于执行数据库操作的属性和方法。
3、 根据权利要求1所述的方法,其特征在于,"数据访问配置项标识",是 基于XML的配置文件中的配置小节的标识,可用于唯一标记一个"数据访问配置 项",每一个"数据访问配置项"描述的内容包括配置项标识、配置项名称、 数据库类型、类型元数据、数据库连接信息,其中"类型元数据"用于程序动态 加载实现了 "数据访问接口"的特定类型、版本数据库访问的对象类型并创建对 象的信息;其屮"数据库连接信息"是用于创建"数据库会话"的连接字符串描 述。
4、 根据权利要求1所述的方法,其特征在于,"与特定数据库类型、版本无 关",由两种规范性定义来实现 一种是方法的规范性走义, 一种是SQL语句的 规范性定义,对于方法的规范性定义,是将在不同的数据库类型中实现差异较大 的SQL语法以及函数等采用一致的编程接口的形式进行封装,屏蔽其差异,在执行时,由"实现特定类型、版本数据库访问的对象"进行具体的转换,形成特定类型、版本数据库可执行的SQL;对于SQL语句的规范性定义,是针对不同数据库 中SQL语法的一些局部差异,采用约定好的规则字符串形式进行封装,屏蔽其差 异,在执行时由"实现特定类型、版本数据库访问的对象"釆用基于"自定义表 达式"解析、替换的方法将规范化的SQL语句替换为具体数据库上可执行的SQL 语句。
5、根据权利要求4所述的方法,其特征在于,"自定义表达式",是一种自 定义的可识别、可解析的表达式形式,其表达的语法为UV:]I[F:] 〈expression〉h表达式总是以"r,开始,以"}"结束。"V:"表示表达式为变 量表达式,"F:"表示后表达式为函数表达式,默认为变量表达式。 〈expression〉 = {variant|〈function》, <function〉 ={function—name(argument[,...n])}。
全文摘要
本发明提供一种访问不同类型关系型数据库的方法,该方法是通过分析、识别不同类型、版本关系型数据库的差异,针对差异进行封装以组件形式向外提供了一致的编程访问接口,对SQL语句语法、各种数据库函数、命令,统一调用标准和书写格式,屏蔽因不同类型、版本关系型数据库造成的差异;内部按照数据库类型及版本进行分别的针对性的实现,在屏蔽数据库类型、版本差异时,采用编程接口和SQL语法两种方法进行封装。两种方法的混合使用,既可达到屏蔽数据库类型、版本差异的效果,又可以使编程实现的复杂度较低,而且相对于采用完全私有SQL语法定义并进行SQL语法解析翻译的方式相比,更加轻量级,在执行效率上有明显的优势。
文档编号G06F17/30GK101645074SQ20091001862
公开日2010年2月10日 申请日期2009年9月7日 优先权日2009年9月7日
发明者孙立新, 赵启杰, 郑伟波 申请人:浪潮集团山东通用软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1