OCCI入门(VC2010下配置) 32位测试通过
2013-07-26 11:32
363 查看
Oracle相关下载地址:
http://www.oracle.com/technetwork/indexes/downloads/index.html
Instant Client是即时客户端,普通的客户端最高版本是11.2.0.1.0,
即时客户端支持到最新11.2.0.3.0
支持VC2010的类库下载(目前只支持11.2.0.3.0和11.2.0.3.0客户端):
http://www.oracle.com/technetwork/database/occidownloads-083553.html
可能是类库与客户端版本不匹配,建立的连接有问题。
debug下运行正常,release下去始终运行出错,不知何故。
在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->
144cf
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
http://www.oracle.com/technetwork/indexes/downloads/index.html
Instant Client是即时客户端,普通的客户端最高版本是11.2.0.1.0,
即时客户端支持到最新11.2.0.3.0
支持VC2010的类库下载(目前只支持11.2.0.3.0和11.2.0.3.0客户端):
http://www.oracle.com/technetwork/database/occidownloads-083553.html
可能是类库与客户端版本不匹配,建立的连接有问题。
debug下运行正常,release下去始终运行出错,不知何故。
在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->
144cf
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
相关文章推荐
- OCCI入门(VC2010下配置)
- OCCI入门(VC2010下配置)
- window7 32位系统 VC2010 opencv2.4.11 配置
- opencv在vc2010 express下环境搭建方法笔记+空白通用工程(已编译测试通过)(提供下载)
- log4j.properties配置详解与实例-全部测试通过
- spring_JUnit4测试_通过注解加载xml配置_@RunWith_@ContextConfiguration
- Windows 7 64bit和Visual Studio 2010下的64位与32位程序配置,dll使用,与性能初步比较
- VC2010 配置OpenGL环境
- Mahout学习之Mahout简介、安装、配置、入门程序测试
- Android基于配置文件的测试模式(不修改代码通过配置文件来打开和关闭测试模式)
- 通过Maven配置测试环境和开发环境连接不同的数据库
- 微信公众平台申请测试接口URL和TOKEN的配置,怎么在本地让微信能通过80端口访问
- log4j系列—log4j.properties配置详解与实例-全部测试通过
- hadoop集群(完全分布式)配置步骤(测试通过)
- sqlite3-入门日记2-VC环境配置
- VS 2010 配置全局的 VC++ 目录,与vs2008的不同
- MD5 32位加密算法源码(测试通过)(系转载 飞扬天下)
- Mahout学习之Mahout简介、安装、配置、入门程序测试
- java+jsp微信开发入门教程 jssdk,通过config接口注入权限验证配置,微信开发教程
- springmvc通过@Value注解读取Properties配置文件的值,junit测试可以取到值,但是在业务中无法读取