简介 html
在Windows下访问Oracle数据库可使用ADO,ADO.Net,OLEDB,ODBC,跨平台的OCCI等方法,其中速度最快,对Oracle支持最完整的是Oracle提供的OCCI。 linux
OCCI:Oracle C++调用接口(OCCI),即Oracle的C++API,容许你使用面向对象的特性、本地类、C++语言的方法来访问Oracle数据库。 ios
去这个地址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。 c++
下面的仿照着上面给出的那篇BLOG作了,将instant_basic解压到D盘,造成了以下的目录结构,d:\instantclient_11_2,下面会有文件及VC8,VC9文件夹,将这两个文件夹删去。将instant_sdk解压,其会在d:\instantclient_11_2目录下生成一个sdk目录,即形如d:\instantclient_11_2\sdk。若是不是的话能够手动调整一下。 sql
将上面下载的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内容的最前面。 数据库
先建立一个工程,选择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了。 oracle
例: spa
#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; }
参考资料: .net
http://blog.csdn.net/xiaobai1593/article/details/6671722 设计