简介
在Windows下访问Oracle数据库可以使用ADO,ADO.Net,OLEDB,ODBC,跨平台的OCCI等方法,其中速度最快,对Oracle支持最完整的是Oracle提供的OCCI。
OCCI:Oracle C++调用接口(OCCI),即Oracle的C++API,允许你使用面向对象的特性、本地类、C++语言的方法来访问Oracle数据库。
OCCI优势
OCCI特性
去这个地址http://www.oracle.com/technetwork/database/occidownloads-083553.html下载OCCI,通过这个表格可以看到VS2010之前的IDE都需要安装客户端之后可以进行开发,而对于VS2010并不需要安装Oracle 客户端,只需下载一个组件即可,这里我下载的是vs2010 32bit的11.2.3.0版本。由于Oracle 客户端是向下兼容的,因此使用11版本的客户端可以连接我的10g数据库。接着支这里http://www.oracle.com/technetwork/topics/winsoft-085727.html下载Instant client package basic及intstant client package SDK,需要注意的是这两个组件的版本号也必须为11.2.3.0。
- 安装instant client package
下面的仿照着上面给出的那篇BLOG做了,将instant_basic解压到D盘,形成了如下的目录结构,d:\instantclient_11_2,下面会有文件及VC8,VC9文件夹,将这两个文件夹删去。将instant_sdk解压,其会在d:\instantclient_11_2目录下生成一个sdk目录,即形如d:\instantclient_11_2\sdk。如果不是的话可以手动调整一下。
- 安装OCCI
将上面下载的occivc10_11203解压到d:\temp,在D:\instantclient_11_2\sdk\lib\msvc目录下创建VC10目录,形成的目录结构如d:\instantclient_11_1\sdk\lib\msvc\vc10,在d:\instantclient_11_2下新建目录VC10。将d:\instantclient_11_2下的oraocci11.dll及oraocci11.sym删除,因为其与VS2010不兼容。从d:\temp中找到oraocci11.lib及oraocci11d.lib,将这两个文件复制到d:\instantclient_11_2\sdk\lib\msvc\vc10,在从d:\temp找到oraocci11.dll及oraocci11d.dll,将这两个文件复制到d:\instantclient_11_2\VC10,将D:\instantclient_11_2\sdk\lib\msvc下的oraocci11.lib删去。最后的工作是设置环境变量,将d:\instantclient_11_2\vc10及d:\instantclient_11_2加入到path内容的最前面。
- 配置VS2010
先创建一个工程,选择c++中空工程OracleConnection,生成可执行的程序的格式为dll。然后在solution explorer中右OracleConnection,选择Properties->Configuration Properties–>vc++ Directories,在Include Directories中加上occi.h所在的位置d:\instantclient_11_2\sdk\include,在Library Directories中加上lib文件的目录d:\instantclient_11_2\sdk\lib\msvc\vc10。上面这两个设置完成后还要到Linker下的Input中,在Additional Dependencies的最后面加上oraocci11d.lib(如果是release模式下请用oraocci11.lib)。至此所有配置及安装工作完成了,可以封装OCCI的dll了。
例:
#include <iostream>
#include <occi.h>
using namespace oracle::occi;
using namespace std;
int main ()
{
Environment *env;
Connection *conn;
Statement *stmt;
ResultSet *rs;
string username = “tmp”;
string password = “123”;
string connstring = “172.16.249.3:1521/mj”;
string sql,strname;
int isno;
env = Environment::createEnvironment(); //创建一个环境变量
conn = env->createConnection(username,password,connstring); //创建一个数据库连接对象
stmt = conn->createStatement(); //创建一个Statement对象
sql = “ SELECT sno,sname FROM student “; //拼接一个SQL语句
stmt->setSQL(sql); //设置SQL语句到Statement对象中
try
{
rs = stmt->executeQuery();//执行SQL语句
while (rs->next())
{ //用循环,一条一条地取得查询的结果记录
isno = rs->getInt(1);//取出第一列的值(对应为int型)
strname=rs->getString(2); //取出第二列的值(对应为string型)
cout << isno << “ AND “ << strname << endl;
}
cout << “SELECT ―― SUCCESS” << endl;
}
catch (SQLException ex)
{
cout << “ Error Number : “<< ex.getErrorCode() << endl; //取出异常代码
cout << ex.getMessage() << endl; //取出异常信息
}
conn->terminateStatement(stmt); //终止Statement对象
env->terminateConnection(conn); //断开数据库连接
Environment::terminateEnvironment(env); //终止环境变量
return 1;
}
参考资料:
http://blog.csdn.net/xiaobai1593/article/details/6671722
http://blog.csdn.net/echo7l/article/details/6362385
http://www.linuxidc.com/Linux/2012-06/62474p2.htm
来源:oschina
链接:https://my.oschina.net/u/1253014/blog/610301