首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Oracle频道
中国IT教育
Google
首页 入门基础 安装配置 体系架构 PLSQL 备份恢复 性能调优 开发技术 资讯动态 考试认证 下载 专题 讨论
您现在的位置: 中国IT实验室 >> Oracle >> 开发技术 >> 正文

两种Oracle应用程序开发接口的对比分析

二 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。笔者的OraExplorer也是基于OCI接口开发。

    但由于C/C++的学习难度比较大,所以OCI的开发难度与ADO、JDBC等开发接口相比要大许多,OCI的每一个函数的参数都非常多,且比较难以理解,而国内关于OCI开发的学习资料非常少,所以使用OCI开发应用程序的程序员相对ADO的程序员要少得多。

三 对比实验设计
    本文将通过一个具体的实验来对比ADO与OCI的性能差距,数据库访问接口的性能主要体现在两个方面,一个是数据读取速度,另一个是数据写入速度,所以本文将基于ADO和OCI各自开发一个Visual C++ 6.0应用程序来进行这两个方面的实验,每个程序完成功能如下:
1) 建立连接
首先,需要连接到Oracle服务器,在这一步需要用户提供SID、用户名和密码信息。
2) 数据初始化
为了实验的通用性及方便读者重现,本实验直接在System用户下操作,需要一个记录数比较多的表来,首先对all_objects表镜像,生成my_objects表,然后对My_objects表自身进行五次递归镜像,最生成一个百万记录的表。相关SQL语句如下:

Truncate table my_objects; Drop table my_objects; create table my_objects as select * from all_objects; insert into my_objects select * from my_objects; insert into my_objects select * from my_objects; insert into my_objects select * from my_objects; insert into my_objects select * from my_objects; insert into my_objects select * from my_objects;

3) 数据读取
遍历数据表,读取Object_name字段的值,并记录花费的时间。
4) 数据写入
--创建新表

truncate table my_objects2; drop table my_objects2; create table my_objects2 ( owner varchar2(30), object_name varchar2(30), subobject_name varchar2(30), object_id int, data_object_id int);


向表中写入10万条记录,并记录花费的时间。

5) 清空环境
释放内存,断开连接。

四 ADO程序关键代码
  首先需要在stdafx.h中添加如下代码

//消除一些无用的警告 #pragma warning(disable:4146 4244) //导入ADO应用库,并对命名空间及EOF重命名 #import "C:\Program Files\Common Files\System\ADO\msado15.dll" \ rename_namespace("MYADO") rename("EOF", "EndOfFile") 下面的是关键实现代码: //初始化连接对象 hr = m_pConnection.CreateInstance(__uuidof(MYADO::Connection)); //初始化记录集对象 m_pRs.CreateInstance(__uuidof(MYADO::Recordset)); //设置连接参数 CString strConnection; strConnection.Format(_T("Provider=OraOLEDB.Oracle.1;" "Password=%s;" "User ID=%s;" "Data Source=%s"), strPwd, strUser, strSID); //连接到数据库 m_pConnection->Open((_bstr_t)strConnection,_T(""),_T(""),-1); //执行SQL语句 strSQL.Format("Truncate table my_objects"); m_pConnection->Execute(_bstr_t(strSQL),NULL,MYADO::adCmdText); //打开记录集 strSQL.Format("Select object_name from my_objects"); m_pRs->Open((_bstr_t)strSQL, m_pConnection.GetInterfacePtr(), MYADO::adOpenForwardOnly, MYADO::adLockReadOnly, MYADO::adCmdText); //遍历并读取数据 while(!m_pRs->EndOfFile) { varValue = m_pRs->Fields->GetItem(long(0))->GetValue(); m_pRs->MoveNext(); } strSQL.Format("Insert into my_objects2 values  ('TestTest','TestTest','TestTest',0,0)"); //写入数据 for(int i=0;i<100000;i++) { m_pConnection->Execute(  _bstr_t(strSQL),NULL,MYADO::adCmdText); } //关闭连接 m_pConnection->Close();

OCI的关键代码限于篇幅,不予罗列。
  本实验的ADO应用程序的源代码、可执行程序以及OCI的可执行程序可以到http://www.snowywolf.net下载,OCI的源代码因涉及技术保密问题,无法公开,敬请谅解。

 

上一页  [1] [2] [3] 下一页

【责编:Peng】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 ·Java入门 Tomcat的配置技巧精华专题…
 ·Oracle RMAN物理备份技术详解…
 今日更新
 社区讨论
 博客论点
 频道精选
 Oracle频道相关导航