搜索
您的当前位置:首页正文

主流数据库的统一接口实现

来源:易榕旅网
主流数据库的统一接口实现皮莹莹陈春玲南京邮电大学计算机学院,南京,210003摘要目前,各大主流数据库厂商在对标准SQL语言支持的同时,泛化出很多特性的处理方法,各个数据库产品的SQL语法仍然有较大的差异,特别是一些高级特性和特殊数据类型,各个数据库给出的解决方法各不相同。设计一种能够屏蔽数据库SQL语法差异性,提供主流数据库访问的方案被越来越多的人所关注,本文通过对常见方案进行分析比较,选择了SQL语句翻译机制作为消除¥QL语句差异的艇决方法。关键词主流数据库,SQL语法差异性,SQL语句翻译机制SQL语法差异性比较主流数据库系统支持的SQL语句的差异性主要表现在以下几个方面t支持的数据类型差异、支持的运算符和函数的差异、高级特性的差异、获取元数据信息的差异。如果应用系统需要知道关于数据库本身的相关信息,就需要查询元数据信息,不同的数据库系统在获取元数据信息的SQL差异性是非常大的。.以取得所有表为例,MySQL只需简单的showtables即可达成目标,SQLServer则需查询系统表sysobjects,ORACLE则要查询另外一个系统表allobjects。2消除SQL语法差异性的方法当前主流的消除sQL语法差异性的方法如图1所示。图l主流消除SQL语法差异性方法(1)编写专用SQL47针对不同的数据库编写不同的SQL,然后在运行时根据当前的数据库类型来执行不同的SQL语句,这种方法能够解决语法差异的问题,但是要求开发人员对每一种可能的语句差异编写特定数据库语句。(2)设计语法交集语法交集就是在软件开发时,避免使用数据库系统语法的差异部分,只使用所有数据库系统都支持的SQL语句。这种方法需要对功能实现进行细粒度的分析,限制了系统功能实现的同时也降低了运行效率。(3)使用实体对象开发人员通过SQL实体对象描述sQL语句的语意,调用SQL实体执行器借助翻译器对实体对象进行处理,生成对应数据库SQL语句并执行,这种方式能很好的利用数据库的高级特性,对开发人员的要求较低,只需了解SQL对象即可,但是编写的代码量变多,实现子查询、连接等复杂功能会引入冗长的代码实现。(4)ORM工具ORM工具支持以面向对象的方式使用数据库,其本质就是以实体对象的方式操作数据库。但是ORM工具与数据库结构耦合紧密,在面向多种未知数据库结构的环境中是不适用的。因此,本文选择¥QL语句翻译机制作为消除SQL语句差异的解决方法,其主要有以下几个优点:(1)SQL语句翻译机制无需针对不同的数据库编写不同的SQL语句,开发人员只需了解SQL语句翻译模块的标准SQL语句,既可以编写面向多种主流数据库的SQL语句。(2)SQL语句翻译机制能够支持较为复杂的语法,对于子查询、UNION等都有良好的支持,也支持查询数据库的元数据信息。(3)SQL语句翻译机制能够支持丰富的数据库函数,包括数学函数、日期函数、字符串函数、逻辑函数、转型函数及聚合函数等。(4)SQL语句翻译机制将开发人员编写的SQL语句直接翻译为目标数据库的SQL语句,解决了采取ORM技术时,实体对象与数据库表结构紧密耦合的问题,具有更好地灵活性和开发性。(5)SQL语句翻译机制可以通过绑定到JDBC的方式提供服务,通过这种方式,用户无需修改任何的业务系统代码,所有的SQL语句在送到数据库系统中执行前都将根据驱动的类型翻译成对应的sQL语句。3SQL语句翻译器的比较目前SQL语句翻译器产品有3个,分别是SwisSQL、LDBC及CowNewSQL,SwisSQL是非开源的商业公司的产品,LDBC和CowNewSQL是开源项目。(1)SwisSQLSwisSQL支持DB2、Oracle等主流的数据库,但是其SQL代码解释存在问题,而且代码扩展困难,对数据库的翻译是定义在SwisSQLStatement接口的toOracleString、toDB2String等方法中的,如果需要扩展,就必须到SwisSQLStatement中添加新的toString方法,并在所有的15个48实现类中添加相应的实现代码。(2)LDBCLDBC是将语句翻译成目标数据库的SQL后,再交由数据库的/DBC驱动运行,无需修改应用层的代码,将LDBC无缝集成到现有系统中去。虽然使用非常方便,但是在功能上不支持在业务开发时常用到的子查询及UNION操作,不支持日期函数中的DATEDIFF、DATEADD及一些字符串处理函数和数学函数等。(3)CowNewSQL与上述两种产品比较,其在SQL语法支持、函数支持、可扩展性方面都具有较大优势。对于子查询、UNION等都有良好的支持,支持查询数据库元数据、数据表管理、索引管理、外键管理等高级特性。常用的函数类型基本都包括其中,例如数学函数、日期函数、字符串函数、逻辑函数、转型函数及聚集函数等。通过将函数名当作标识符处理,新增的函数元需修改语法文件,只需在方法翻译器中添加代码即可。4SQL语句翻译实现CowNewSQL将源SQL语句翻译为一颗抽象语法树,然后将此语法树交给各个数据库平台的翻译器去翻译成平台相关的SQL。用户只需使用标准的SQL语句,即可去访问指定的关系数据库。CowNewSQL支持如下几种类型的SQL语句:数据库表操作函数(CreateTable、Createlndex等),数据库查询修改操作函数(Select/Insert/Delete/Update),支持子查询、Join、Union等高级的SQL特性,支持日期(包括取当前日期、从日期中提取任意部分、计算日期差异、日期前后推算等)、数学(包括取绝对值、取PI值、四舍五入、对数计算、随机数等)、字符串(包括取子字符串、取字符串长度、字符串截断、大小写转换等)、基本数据处理(包括数字字符串互转、日期转字符串、非空判断等)等函数。CowNewSQL的语法定义和主流的SQL语法基本兼容,包括标识符、数字、字符串的格式等。但是有些SQL语法因为各个数据库系统的实现都不一样,因此CowNewSQL对这些语法进行了抽象,形成了自己的特色语法,主要包括如下两个方面:(1)日期常量的表示各个不同数据库中对日期常量的表示各不相同,如果混用的话很容易造成数据错误,因此CowNewSQL采用了特殊的标识来表示日期常量,格式如下:{‘日期值’}。(2)字符串的连接各个不同数据库中字符串的连接也是不同的,CowNewSQL采用了特殊的方式来表示字符串的连接,格式如下:字符串lII字符串2。下面以对数据库的访问为例,给出利用CowNewSQL实现SQL语句翻译的步骤:(1)导入CowNewSQL的相关Jar包到程序的ClassPath,包括cownewsql··奎.jfir、an&.jar、commons—kulg毒·.j盯、retrotranslator—runtime·囊.jar。(2)调用类com.cownew.cownewsql.imsql.comnlon.DialectManager的createTranslator方法创建一个翻译器,然后调用翻译器的translateSQL方法来将标准SQL语句翻译成目标数据库的SQL语句。由于被翻译的SQL语句有可能是多个语句,因此翻译器的translateSQL方法返49回值为字符串数组,每个数据元素表示一个翻译后的语句。程序代码如下所示。publicString[]getStandardSQL(StringDataSource)l//根据传入的数据库标识获取数据库类型//根据致琚厍类型刨.B建T相.ylee_应D的at翻a.S译ou器rce)stringDBe=lge.tDvYT(.;ISQLTran.s.1ator乜【=DiaIectManager.creatoTranslator(DBType);String[]venderSQLs;//调用翻译器的translateSQL方法进行翻译venderSQLs=tx.translateSQL(”selecttop10·fromtwhererid<any(selectridfromt2)”);retlLnlvenderSQLs;}如果上述的数据库类型为Oracle,则示例中SQL语句被翻译为:select·fromtwhere制<ANY(selectridfromt2)androwllum<=10:如果上述的数据库类型为MSSQLServer,则示例中SQL语句被翻译为:selecttop10宰fromtwhererid<ANY(∞lectridfromt2)o5结束语设计一种能够屏蔽数据库SQL语法差异性,提供主流数据库访问的方案被越来越多的人所关注,本文通过对常见方案进行分析比较,选择了SQL语句翻译机制作为消除sQL语句差异的解决方法。参考文献[1]刘冬亮.我国数据库产业发展与战略研究[D].东北师范大学,2009[2]叶志坤.基于国产数据库应用增值平台研究与开发[D】.华中科技大学,2005[4]潘瑞芳.主流数据库性能比较及数据库构架分析[J].浙江传媒学院学报,2005.01UniformAccessInterfacesofDominantDatabasePIYingyingCHENChunlingSchoolofComputer,NanjingUniversityofpost&Telecommunication,Nanjing21003AlmtractAtpresent,thestandardSQLlangua铲supportedbythemaindatabasemanufacturers,general-izedalotofcharacteristicprocessingmethods。variousdatabasepmd地tsofSQLsyntaxstillhaveobviousdifferences,especiallytlomeadvancedfeaturesandspecialdatatypes,eachsolutiongivenbyeachdatabase&renotidentical.Moreandmorepeopleareconcerningabout击sign0fsolutions。whichcan8hie】dSQLsyntaxdifferenceandsupplytheacces8tomaindatabases,onthebasisofanalysingthecommonsolutions,thisactielechoosetheSQLstatementtranslationmechanisma8themethodforeliminatingthedifferencesofSQLstatement.KeyWordsDominantDatabase,SQLsyntaxdifference,SQLstatementstranslationmechanism

因篇幅问题不能全部显示,请点此查看更多更全内容

Top