好学IT学院:IT信息技术分享交流平台
来源:CN-JAVA  作者:c_sql  发布时间:2006-09-01  ★★★加入收藏〗〖手机版
摘要:目前主流的企业应用大多数是基于以下的数据库开发的,MicrosoftSQLServer、IBMDB2、Oracle、Sybase。作为软件开发商,其软件需要支持不同的数据库,但是公司缺乏精通多种数据库的人才。就算有精通不同数据库的人才,开发不同的DataAcc…

目前主流的企业应用大多数是基于以下的数据库开发的,Microsoft SQL Server、IBM DB 2、Oracle、Sybase。作为软件开发商,其软件需要支持不同的数据库,但是公司缺乏精通多种数据库的人才。就算有精通不同数据库的人才,开发不同的Data Access模块业导致工 作量增加,程序难以维护。

但是你到sourceforge.net上,你会发现其实很多项目的做法,是只用了非常非常有限的工作,只用了这些数据库之间的公共功能的子集。当然也有的项目为不同的数据库编写不同的DAL(数据库访问层)

我的一种解决方案是提供一套自定义的SQL文法,在开发应用程序的时候,翻译为不同的数据的SQL。

使用“递归下降”的文法分析技术,并且经过针对性的优化处理,效率极高,普通的SQL通常在0.1~0.2毫秒就能翻译完成。在使用的过程中,可以完全忽略其所占用的执行时间。

如果对此技术感兴趣,可以致信:c_sql@163.net ,索要试用版本和相关文档。

下面是例子:

例一

翻译如下的SQL语句:

select top 10 * from t where a>b order by a, b asc, c desc

测试结果是:

Oracle :

SELECT * FROM (SELECT * FROM t WHERE (a > b) ORDER BY a ASC, b ASC, c DESC) WH

ERE ROWNUM <= 10

翻译1000次共耗时 : 120 (毫秒), 平均每次0.12(毫秒)

MS SQL Server :

SELECT TOP 10 * FROM t WHERE (a > b) ORDER BY a ASC, b ASC, c DESC

翻译1000次共耗时 : 140 (毫秒), 平均每次0.14(毫秒)

DB2 :

SELECT * FROM t WHERE (a > b) ORDER BY a ASC, b ASC, c DESC FETCH FIRST 10 ROW

S ONLY

翻译1000次共耗时 : 130 (毫秒), 平均每次0.13(毫秒)

Sybase :

SELECT TOP 10 * FROM t WHERE (a > b) ORDER BY a ASC, b ASC, c DESC

翻译1000次共耗时 : 151 (毫秒), 平均每次0.151(毫秒)

例二

翻译如下的SQL语句

Oracle :

SELECT * FROM T1 A, T2 B WHERE A.FId = B.FId

翻译1000次共耗时 : 80 (毫秒), 平均每次0.08(毫秒)

select * from T1 A inner join T2 B on A.FId = B.Fid

MS SQL Server :

SELECT * FROM T1 A INNER JOIN T2 B ON A.FId = B.FId

翻译1000次共耗时 : 90 (毫秒), 平均每次0.09(毫秒)

DB2 :

SELECT * FROM T1 A INNER JOIN T2 B ON A.FId = B.FId

翻译1000次共耗时 : 90 (毫秒), 平均每次0.09(毫秒)

Sybase :

SELECT * FROM T1 A INNER JOIN T2 B ON A.FId = B.FId

翻译1000次共耗时 : 100 (毫秒), 平均每次0.1(毫秒)

  • 好学触屏公众号虎力全开、杨帆起航!
  • 好学考试H5触屏版开放内测