博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OCCI入门(VC2010下配置)
阅读量:6839 次
发布时间:2019-06-26

本文共 3595 字,大约阅读时间需要 11 分钟。

刚刚在vs2010下配置成功,麻烦非常多。
Oracle相关下载地址:
 
Instant Client是即时客户端,普通的客户端最高版本是11.2.0.1.0,
即时客户端支持到最新11.2.0.3.0
支持VC2010的类库下载(目前只支持
11.2.0.3.0和11.2.0.3.0客户端
):
 
可能是类库与客户端版本不匹配,建立的连接有问题。
debug下运行正常,release下去始终运行出错,不知何故。
2012-09-22补充
1.下载安装11.2.0.3.0普通客户端解决了release无法运行问题。
2.编译通过运行出错两个问题:
2.1环境变量ORACLE_HOME问题
如果有多个客户端会冲突,则这句运行不过去。
Environment
 *env = Environment::createEnvironment();  
删除ORACLE_HOME通过注册表设置路径。
2.2无法建立连接,下面这句运行不过去。
Connection
 *conn = env->createConnection("uid", "pwd","oracle_svr_name"); 
打开服务器端正确创建监听器(LISTENER)和服务。
在VC++中使用OCCI

 1.简介

Windows下访问Oracle数据库可以使用ADO,ADO.Net,OLEDB,ODBC,跨平台的OCCI等方法,其中速度最快,对Oracle支持最完整的是Oracle提供的OCCI.

2.
安装
OCCI SDK
OCCI SDK
包含在
Oracle
客户端中,在如下位置可以找到:
头文件:
C:\oracle\ora92\oci\include
库文件:
C:\oracle\ora92\oci\lib\msvc
 
推荐安装
Oracle
即时客户端(
Instant Client
),它也包含有
OCCI SDK
头文件:
instantclient_10_2\sdk\include
库文件:
instantclient_10_2\sdk\lib\msvc
 
3.
编译
OCCI
程序
关于在
VC
下如何编译,调试
OCCI
程序,参见下面
 
4.OCCI
编程步骤
 
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
(
int
 maxIterations);
//
指定某个参数的大小,
string
byte
需要
stmt
->
setMaxParamSize
(
int
 parameterIndex, 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");
 
int
 quantity;
//
注册输出参数
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程序的关键设置

#define WIN32COMMON

//解决error C2995: 'getVector' : template function has already been defined

#include <occi.h>

using namespace oracle::occi;

#pragma comment(lib,"oci.lib")

#pragma comment(lib,"ociw32.lib")
#pragma comment(lib,"oraocci10.lib")

//解决无法调试OCCI的问题
//参考sdk\demo目录下的make.bat
对于VS2003:

1.项目属性 -> C/C++ -> 代码生成 -> 运行时库 -> 多线程调试 DLL (/MDd)
2.项目属性 -> 链接器 -> 输入 -> 附加依赖项 -> msvcrt.lib msvcprt.lib
对于VC++6.0
1.Project Settings -> C/C++ -> Code Generation -> Use run-time library: -> Debug Multithreaded DLL
2.Project Settings -> Link -> Object/library modules:末尾添加
msvcrt.lib msvcprt.lib  
url:

转载地址:http://pxwul.baihongyu.com/

你可能感兴趣的文章
openlayers 根据style设置显示级别并在字体加背景框
查看>>
sys_init
查看>>
array_map与array_column之间的关系
查看>>
xml 学习
查看>>
一次性验证码
查看>>
Mac设置信认任意来源应用
查看>>
基于matlab的退化图像复原(二)------逆滤波复原
查看>>
jquery中的each各种神奇遍历用法
查看>>
代码同步到树莓派
查看>>
obj-c 坑
查看>>
MySql数据库概念
查看>>
javascript中将整数添加千位符号
查看>>
软件测试艺术一:程序正确性证明
查看>>
面向对象课程第二单元作业总结
查看>>
Linux下运行C语言程序
查看>>
一句white-space:nowrap解决IE6,IE7下浮动元素不自动换行
查看>>
SQL Server中的小技巧(重复、替换、截取、去空格、去小数点后的位数)
查看>>
codevs 5963 [SDOI2017]树点染色
查看>>
2549 自然数和分解
查看>>
渔夫捕鱼问题
查看>>