1、参考文档
工欲善其事,必先利其器。oracle官方参考文档:Oracle Document。里面有各种文档,其中有两本是关于oci和occi的。
c语言《Oracle Call Interface Programmer's Guide》和c++语言《Oracle C++ Call Interface Programmer's Guide》。
2、vs2005 开发环境搭建
本文只介绍OCCI开发环境的搭建,关于oci开发环境,基本等同。
2.1、下载库和头文件
下载地址:http://www.oracle.com/technetwork/topics/winsoft-085727.html?ssSourceSiteId=ocomen
由于10.2版本的instant client没有支持vs2005的动态库,即使编译成功,运行时也会报各种奇奇怪怪的问题,所以选择支持vs2005的11.2.0.3.0版本。
搭建开发环境需下载两个文件:
- instantclient-basic-nt-11.2.0.3.0.zip。这个包包含运行OCCI程序的动态链接库。
- instantclient-sdk-nt-11.2.0.3.0.zip。这个包包含开发库的头文件、静态链接库以及occi示例程序。
2.2、配置
解压2.1中下载的两个包。
OCCI项目的属性-》配置属性-》C/C++-》常规-》附加包含目录 中添加解压后的“instantclient_11_2\sdk\include”目录;
OCCI项目的属性-》配置属性-》连接器-》常规-》附加库目录 中添加解压后的“instantclient_11_2\sdk\lib\msvc\vc8”目录;
OCCI项目的属性-》配置属性-》连接器-》输入-》附加依赖项 中添加oraocci11.lib库。
将解压后的instantclient_11_2目录中的dll文件拷贝至编译的可执行文件目录。
3、搭建开发环境中遇到的问题
3.1、10.2版本的问题
由于系统原本安装了10.2版本的Oracle client 。安装客户端时会自动安装oci开发库。原本想用10.2版本的库,哪知道这个版本不支持vs2005,编译能正常通过,可运行时就会报奇奇怪怪的错误。最后只好重新下载11.2的开发库。
oracle随后发布的补丁里添加对vs2005的支持,如果想使用10.2版本客户端的oci开发库或使用10.2版本instant client开发库,需要安装如下的补丁:
occivc8win32-102030-ps13-133884.zip
3.2、linux开发环境的搭建
linux环境搭建和vs2005开发环境搭建差不多。由于linxu上没有安装oracle数据库和客户端,因此没有什么干扰。直接在ldconf中添加了动态链接库目录,这样就不用把动态链接库拷贝到可执行程序目录了。当然在win32开发环境中,如果不想拷贝动态链接库,你也可以在环境变量PATH中进行设置。
3.3、关于demo
对于下载包中的demo,不要指望直接编译就能运行。你需要根据自己的系统修改demo.mk文件。
3.4、中文乱码问题
如果你在查询中文显示乱码,极有可能是字符集问题。
使用sqlplus查询:
SQL>select userenv('language') from dual;
查询到服务端的字符集设置是SIMPLIFIED CHINESE_CHINA.ZHS16GBK
创建环境变量函数里可以直接指定字符集,于是如下创建环境变量:
env = Environment::createEnvironment ("ZHS16GBK","ZHS16GBK")
字符集配对了,就不会产生乱码。
3.5、debug版本的问题
11.2版本的instant client没有vs2005的debug库,官方文档说安装数据库时会提供vs2005的debug库。没有试,需要的童鞋自己试试吧。11.2版本的补丁只有vs2008的debug库。
还好10.2版本的补丁有debug库。