目前, Oracle应用程序可以在VB、Delphi等高级开发语言中开发,也可以以C++开发,或者Java语言开发,甚至可以通过ASP、JSP、Perl等脚本语言来访问Oracle。这些语言环境各有其优势,C++无疑是追求极致速度的首选。在C++中我们也可以有多种接口方式,可以使用ADO通用接口,可以使用OCI/OCCI,还可以使用ODBC、OO4O及OLEDB等方式。
在这些方式中,ADO与OCI是应用最为广泛的两种方式,本文将集中力量介绍在Visual C++ 6.0 中这两种接口的开发方法及它们的特点对比。
一、ADO开发接口简介
ADO(ActiveX Data Objects,ActiveX数据对象)是Microsoft为强大的数据访问接口 OLEDB(对象链接和嵌入数据库)而设计的,是一个便于使用的应用层的编程接口。使用 ADO编写的应用程序可以通过OLEDB提供者访问和操作数据库服务器中的数据。
ADO 最主要的优点是易于使用、可以访问多种数据库及可以在多种语言中开发。由于ADO建立在自动化(Automation)的基础上,所以ADO的应用场合非常广泛,不仅可在Visual Basic这
样的高级语言开发环境中使用,还可以在一些脚本语言中使用,这对于开发Web应用和在ASP(Active Server Page,动态服务器主页)的脚本代码中访问数据库提供了操作应用的捷径。
ADO是以OLE DB为基础,它对OLE DB进行了封装,所以ADO其实是OLE DB的应用层接口,是介于OLE DB与应用程序之间的中间层。这种结构为一致的数据访问接口提供了很好的扩展性,不再局限于特定的数据源,只要OLE DB支持的数据源,ADO都可以很好地支持。
ADO的另一个特性是使用简单,它封装了OLE DB的复杂的接口,以Connection、Recordset、Command三个主体对象及Errors、Properties、Parameters和Fields四个集合对象搭建起了ADO对象模型。通过这七个对象及它们的方法,我们就可以完成绝大多数的访问数据库的任务,来实现我们的应用目标。
二、OCI开发接口简介
OCI(Oracle Call Interface)是Oracle 数据库调用接口,是由Oracle提供的用于开发前端应用程序及中间件的C/C++开发类库。通过OCI,可以控制所有类型的SQL语句的执行,包括DDL、控制语句(事务、会话、系统)、查询、DML、PL/SQL,以及嵌入式SQL。
OCI能够最大程度地控制程序的运行,执行Oracle服务器所允许的多有数据库操作,可以访问Oracle数据库服务器里的所有数据类型,包括标量值、集合和所有对象类型的实例,可以以引用的方式访问对象及其元数据,可以动态获取、修改对象的属性值。OCI程序既具有SQL非过程性的优点,也具有第三代程序设计语言的过程性和灵活性,使开发的编程技术具有更强的数据处理能力。
同时,OCI在所有运行Oracle的平台上具有良好的可移植性,程序无须太大修改即可运行在Unix/Linux/Windows甚至嵌入式环境下。OCI还是其他Oracle开发接口的底层实现,如ADO、JDBC都是在OCI上层的封装,由于OCI是比较底层的接口,少了很多层的封装,可以提供应用程序与Oracle的直接连接,所以OCI可以提供最佳的性能。
正是基于此,Oracle自身的一些工具及许多著名的Oracle 数据库工具也都是用OCI开发的,如大名鼎鼎的Toad。但由于C/C++的学习难度比较大,所以OCI的开发难度与ADO、JDBC
等开发接口相比要大许多,OCI的每一个函数的参数都非常多,且比较难以理解,而国内关于OCI开发的学习资料非常少,所以使用OCI开发应用程序的程序员相对ADO的程序员要少得多。
三、ADO与OCI对比分析
java连接sqlserver数据库
1.功能方面
ADO为了保持其通用性,除了对MS SQLServer支持较好外,没有办法对其他数据库提供很完善的功能,对Oracle同样如此。通过ADO访问Oracle,可以实现比较通用的功能,如DML、DDL、查询、事务控制等,但对于Oracle中的对象、集合、LOB等特殊元素则不能很好地支持,对于PL/SQL的支持也很不完整。
而OCI在这方面则有着显著的优势,它可以很完整地支持Oracle的所有功能,可以说是对Oracle功能支持最完整的开发接口。而且OCI可以支持多种操作系统,而ADO则只能在Windows系列操作系统下运行。
在支持面方面,ADO则有很大优势:一方面,它几乎支持目前所有流行的数据库,如MS SQLServer、Oracle、Sybase、DB II等,写好的访问一种数据库的代码,可以稍做修改就能支持另一种数据库,这是ADO的巨大优势;另一方面,它也几乎支持目前所有的开发环境,不管是采用VC开发还是用VB开发,甚至采用Delphi、ASP等等都可以使用ADO来访问数据库。
2.性能方面
在性能方面,OCI也有着非常大的优势,读取写入数据的速度快了多倍。由于OCI省掉了应用程序与Oracle服务器之间的中间封装层,可以直接访问数据,另外,OCI是C接口,可以直接操纵内在,所以其访问速度非常快,占用系统资源和网络资源也都要少得多。
在实际开发中,对于存储在Oracle中的二进制数据(如空间数据、影像数据)及长字符串数据,OCI的性能优势要更加明显。
3.开发难度方面
在这方面ADO的优势很明显。首先,ADO的学习难度较低,ADO是以面向对象的思想封装的,其对象和方法都易学易用,而且ADO的学习资料很丰富,网上可以到大量的文档及源代码;而OCI则是过程化封装的开发接口,它的函数虽然不是很多,但函数之间的关系比较复杂,且函数的参数非常多,很多函数都有十几个参数,非常难于理解。
另外,国内使用OCI开发的程序员比较少,可用的参考资料也非常少,所以OCI的学习难度很大。OCI开发的程序的代码量要比ADO的多得多,且代码之间的关系比较复杂,不易维护。
四、结语
ADO与OCI是在VC中开发Oracle应用程序的常用的两种接口,它们各自有着自己的特点,有独特的优势,也都有自己的局限性,在开发过程中我们需要根据具体情况来选择使用哪种开发接口。
如果应用程序需要访问多种数据库,既要访问存储在Oracle中的数据,也要访问存储在MS S
QL Server中的数据,那么ADO是最佳选择,它可以使用一套代码实现多种数据库的访问。如果应用程序只需要访问Oracle数据库,且对性能要求很高,那OCI就是最好的选择了。