在VC++中使用OCCI
来源:互联网 发布:mac怎么从u盘启动 编辑:程序博客网 时间:2024/06/05 10:32
1.简介
OCCI简介
Oracle C++ Call Interface (OCCI) 是一套应用程序编程接口,它允许C++程序与一个或者多个Oracle数据库进行交互.OCCI给予你强大的数据库操作能力,比如说执行SQL,处理存储过程等.
在Windows下访问Oracle数据库可以使用ADO,ADO.Net,OLEDB,ODBC,跨平台的OCCI等方法,其中速度最快,对Oracle支持最完整的是Oracle提供的OCCI。
开发基于Oracle数据库的应用程序,我们可以选择多种工具,不仅可以用一般的数据库开发技术,诸如ADO(ActiveX Data Objects)、ODBC(Open DataBase Connectivity)等等,同时,也可以用Oracle公司提供的专门的开发工具,诸如Pro C_C++,OCI(Oracle Call Intedace)等等。比较这几种方式,前者因为是通用技术,开发起来比较容易,但是有一个致命的弱点就是诸如ADO之类的通用技术的速度太慢,如果我们要开发管理海量数据的数据库,比如影像数据库,那么,这种速度我们是不能忍受的。而OCI虽然开发起来难度大一些,但是它的速度极快,而且是一种底层接口,几乎可以操纵Oracle数据库的任何对象。
2.安装OCCI SDK
OCCI SDK包含在Oracle客户端中,在如下位置可以找到:
头文件:C:\oracle\oci\include
库文件:C:\oracle\oci\lib\msvc
推荐安装Oracle即时客户端(Instant Client),它也包含有OCCI SDK。
头文件:instantclient_10_2\sdk\include
库文件:instantclient_10_2\sdk\lib\msvc
3.编译OCCI程序
关于在VC下如何编译,调试OCCI程序,参见《VC++调试OCCI程序的关键设置》
4.OCCI编程步骤
#include <occi.h>
using namespace oracle::occi;
#pragma comment(lib,"oci.lib")
#pragma comment(lib,"ociw32.lib")
#pragma comment(lib,"oraocci10.lib")
4.1连接到数据库
//创建OCCI上下文环境
Environment*env= Environment::createEnvironment();
assert(env!=NULL);
//创建数据库连接
Connection*conn= env->createConnection("uid","pwd","oracle_svr_name");
//...
// todo:插入自己的代码
//关闭连接
env->terminateConnection(conn);
//释放
Environment::terminateEnvironment(env);
4.2执行基本的SQL语句
//创建SQL语句控制句柄
Statement*stmt= conn->createStatement();
a.执行一般的SQL语句
stmt->executeUpdate("Create TABLE basket_tab (fruit VARCHAR2(30), quantity NUMBER)");
stmt->executeUpdate("delete basket_tab");
b.重复利用SQL语句,参数化的SQL语句
//:1,:2是参数占位符
stmt->setSQL("Insert INTO basket_tab VALUES(:1,:2)");
//第一个参数
stmt->setString(1,"Bananas");
//第二个参数
stmt->setInt(2,5);
stmt->executeUpdate();
c.一次修改多行数据
//最多允许的迭代次数,注意这个参数需要在setXXX系列函数之前执行
stmt->setMaxIterations(intmaxIterations);
//指定某个参数的大小,string和byte需要
stmt->setMaxParamSize(intparameterIndex,int maxParamSize);
for(...)
{
// 第一个参数
stmt->setString(1,"Bananas");
// 第二个参数
stmt->setInt(2,5);
//増加一行记录,类似于ADO的AddNew
pStmt->addIteration();
}
stmt->executeUpdate();
d.执行查询:获取结果集(记录集)
ResultSet*rs= stmt->executeQuery("Select * FROM basket_tab");
while(rs->next())
{
string fruit =rs->getString(1);// get the first column as string
int quantity =rs->getInt(2);// get the second column as int
}
//关闭结果集
stmt->closeResultSet(rs);
e.执行存储过程
//指定存储过程countFruit
stmt->setSQL("BEGIN countFruit(:1, :2); END:");
//设置第一个参数
stmt->setString(1,"Apples");
intquantity;
//注册输出参数
stmt->registerOutParam(2,Type::OCCIINT,sizeof(quantity));
//执行此存储过程
stmt->executeUpdate();
//释放SQL语句控制句柄
conn->terminateStatement(Statement*stmt);
4.3事务
所有的DDL默认开始并自动提交一个事务
所有的DML默认开始一个事务,且不会自动提交
//可以指定DML是否自动提交
stmt->setAutoCommit(TRUE/FALSE);
//也可以手动提交或回滚。
conn->commit();
conn->rollback();
4.4异常处理
try
{
//OCCI程序
}
catch(SQLException&sqlExcp)
{
cerr <<sqlExcp.getErrorCode<<": " << sqlExcp.getErrorMessage()<<endl;
}
catch(exception&excp)
{
cerr << excp.what()<<endl;
}
转载:点击打开链接
- 在VC++中使用OCCI
- 在VC++中使用OCCI
- 在VC++中使用OCCI
- VC++中使用OCCI
- VC++中使用OCCI
- OCCI在VC下的编译问题
- VC使用OCCI开发的简介
- vc++6.0中使用OCCI前的配置 链接oracle查询数据的示例
- vs2005 中使用OCCi链接oracle
- VC++.net使用OCCI连接远程Oracle数据库
- 在VC中使用ADO
- 在VC中使用FileSystemObject
- 在VC中使用Flash
- 在VC中使用Debug
- 在VC中使用TabCtrl
- 在VC中使用CCheckListBox
- 在VC 中使用GDI+
- 在vc中使用lib
- Java内部类
- 使用HandBrake的视频压制及投稿教程
- 软件思想--花10年时间自学编程
- 让文本工具功能变得更有效---试译Excel 2013 Power Programming with VBA中Making the Text Tools utility efficient两节
- module_param模块函数的作用--用来传递参数
- 在VC++中使用OCCI
- QT获取本机IP地址API
- 字符串匹配算法-Shift And算法
- 面向对象_静态
- 使程序在Linux下后台运行
- 山东省第三届ACM大学生程序设计竞赛(待添加)
- 关于oracle错误:ORA-00214
- Hive数据倾斜总结
- 面向对象_继承、抽象类、接口