科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道两种Oracle应用程序开发接口的对比分析(2)

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文将介绍在Visual C 6.0中开发Oracle应用程序的最常用的两种方式:ADO(ActiveX Data Objects, ActiveX数据对象)与OCI(Oracle Call Interface,Oracle调用接口)。

作者:李绍俊 来源:IT168 2007年8月31日

关键字: ORACLE

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共3页)

三、对比实验设计

本文将通过一个具体的实验来对比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的源代码因涉及技术保密问题,无法公开,敬请谅解。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章