龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > Oracle 技术 >

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

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
三、对比实验设计 本文将通过一个具体的实验来对比ADO与OCI的性能差距,数据库访问接口的性能主要体现在两个方面,一个是数据读取速度,另一个是数

三、对比实验设计

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

精彩图集

赞助商链接