【SQL开源代码栏目提醒】:网学会员鉴于大家对SQL开源代码十分关注,论文会员在此为大家搜集整理了“主流数据库的统一接口实现 - 会议论文”一文,供大家参考学习
主流数据库的统一接口实现 皮莹莹 陈春玲 南京邮电大学计算机学院,南京,210003 摘要目前,各大主流数据库厂商在对标准SQL语言支持的同时,泛化出很多特性的处理方法, 各个数据库产品的SQL语法仍然有较大的差异,特别是一些高级特性和特殊数据类型,各个数据 库给出的解决方法各不相同。
设计一种能够屏蔽数据库SQL语法差异性,提供主流数据库访问的 方案被越来越多的人所关注,本文通过对常见方案进行分析比较,选择了SQL语句翻译机制作为 消除¥QL语句差异的艇决方法。
关键词主流数据库,SQL语法差异性,SQL语句翻译机制 SQL语法差异性比较 主流数据库系统支持的SQL语句的差异性主要表现在以下几个方面t支持的数据类型差异、支持的运算符和函数的差异、高级特性的差异、获取元数据信息的差异。
如果应用系统需要知道关于数据库本身的相关信息,就需要查询元数据信息,不同的数据库系统在获取元数据信息的SQL差异性是非常大的。
.以取得所有表为例,MySQL只需简单的show tables即可达成目标,SQL Server则需查询系统表sysobjects,ORACLE则要查询另外一个系统表all objects。
2消除SQL语法差异性的方法 当前主流的消除sQL语法差异性的方法如图1所示。
图l主流消除SQL语法差异性方法 (1)编写专用SQL 47 针对不同的数据库编写不同的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语句。
3 SQL语句翻译器的比较 目前SQL语句翻译器产品有3个,分别是SwisSQL、LDBC及CowNewSQL,SwisSQL是非
开源的商业公司的产品,LDBC和CowNewSQL是
开源项目。
(1)SwisSQL SwisSQL支持DB2、Oracle等主流的数据库,但是其SQL
代码解释存在问题,而且
代码扩展困难,对数据库的翻译是定义在SwisSQLStatement接口的toOracleString、toDB2String等方法中的,如果需要扩展,就必须到SwisSQLStatement中添加新的toString方法,并在所有的15个 48 实现类中添加相应的实现
代码。
(2)LDBC LDBC是将语句翻译成目标数据库的SQL后,再交由数据库的/DBC驱动运行,无需修改 应用层的
代码,将LDBC无缝集成到现有系统中去。
虽然使用非常方便,但是在功能上不支持 在业务开发时常用到的子查询及UNION操作,不支持日期函数中的DATEDIFF、DATEADD及 一些字符串处理函数和数学函数等。
(3)CowNewSQL 与上述两种产品比较,其在SQL语法支持、函数支持、可扩展性方面都具有较大优势。
对 于子查询、UNION等都有良好的支持,支持查询数据库元数据、数据表管理、索引管理、外键管理等高级特性。
常用的函数类型基本都包括其中,例如数学函数、日期函数、字符串函数、逻辑 函数、转型函数及聚集函数等。
通过将函数名当作标识符处理,新增的函数元需修改语法文件,只需在方法翻译器中添加
代码即可。
4 SQL语句翻译实现 CowNewSQL将源SQL语句翻译为一颗抽象语法树,然后将此语法树交给各个数据库平台 的翻译器去翻译成平台相关的SQL。
用户只需使用标准的SQL语句,即可去访问指定的关系数据库。
CowNewSQL支持如下几种类型的SQL语句:数据库表操作函数(CreateTable、Createlndex等),数据库查询修改操作函数(Select/Insert/Delete/Update),支持子查询、Join、Union等高级的SQL特性,支持日期(包括取当前日期、从日期中提取任意部分、计算日期差异、日期前后推算等)、数学(包括取绝对值、取PI值、四舍五入、对数计算、随机数等)、字符串(包括取子字符串、取字符串长度、字符串截断、大小写转换等)、基本数据处理(包括数字字符串互转、日期转字符串、非空判断等)等函数。
CowNewSQL的语法定义和主流的SQL语法基本兼容,包括标识符、数字、字符串的格式等。
但是有些SQL语法因为各个数据库系统的实现都不一样,因此CowNewSQL对这些语法进行了抽象,形成了自己的特色语法,主要包括如下两个方面: (1)日期常量的表示 各个不同数据库中对日期常量的表示各不相同,如果混用的话很容易造成数据错误,因此CowNewSQL采用了特殊的标识来表示日期常量,格式如下:{‘日期值’}。
(2)字符串的连接 各个不同数据库中字符串的连接也是不同的,CowNewSQL采用了特殊的方式来表示字符串的连接,格式如下:字符串l II字符串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回值为字符串数组,每个数据元素表示一个翻译后的语句。
程序
代码如下所示。
public String〔〕getStandardSQL(String DataSource) l //根据传入的数据库标识获取数据库类型 string DB = elvYT.; ge.tD ( //根据致琚厍类型刨.B建T相.ylee_应D的at翻a.S译ou器rce) ISQLTran.s.1ator乜【=DiaIectManager.creatoTranslator(DBType); String〔〕venderSQLs; //调用翻译器的translateSQL方法进行翻译 venderSQLs=tx.translateSQL(”select top 10·from t where rid<any(select rid from t2)”); retlLnl venderSQLs; } 如果上述的数据库类型为Oracle,则示例中SQL语句被翻译为: select·from t where制<ANY(select rid from t2)and rowllum<=10: 如果上述的数据库类型为MSSQLServer,则示例中SQL语句被翻译为: select top 10宰from t where rid<ANY(∞lect rid from t2)o5 结束语 设计一种能够屏蔽数据库SQL语法差异性,提供主流数据库访问的方案被越来越多的人所关注,本文通过对常见方案进行分析比较,选择了SQL语句翻译机制作为消除sQL语句差异的解决方法。
参考文献〔1〕 刘冬亮.我国数据库产业发展与战略研究〔D〕.东北师范大学,2009〔2〕 叶志坤.基于国产数据库应用增值平台研究与开发〔D】.华中科技大学,2005〔4〕 潘瑞芳.主流数据库性能比较及数据库构架分析〔J〕.浙江传媒学院学报,2005.01 Uniform Access Interfaces of Dominant Database PI Yingying CHEN Chunling School of Computer,Nanjing University of post&Telecommunication,Nanjing 21003 Almtract At present,the standard SQL langua铲supported by the main database manufacturers,general- ized a lot of characteristic processing methods。
various database pmd地ts of SQL syntax still have obvious differences,especially tlome advanced features and special data types,each solution given by each database &re not identical.More and more people are concerning about击sign 0f solutions。
which can 8hie】d SQL syntax difference and supply the acces8 to main databases,on the basis of analysing the common solutions, this actiele choose the SQL statement translation mechanism a8 the method for eliminating the differences of SQL statement. KeyWords Dominant Database,SQL syntax difference,SQL statements translation mechanism
上一篇:
SQuirreL SQL Client
下一篇:
产品定价因素分析MBA论文:以印度移动应用程序定价分析为例