簡介 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 設計