C++經過OCCI操做Oracle

簡介 html

Windows下訪問Oracle數據庫可使用ADO,ADO.Net,OLEDB,ODBC,跨平臺的OCCI等方法,其中速度最快,對Oracle支持最完整的是Oracle提供的OCCI。 linux

OCCI:Oracle C++調用接口(OCCI),即Oracle的C++API,容許你使用面向對象的特性、本地類、C++語言的方法來訪問Oracle數據庫。 ios

OCCI優點

基於標準C++和麪向對象的設計;
效率較高;
適合開發C/S模式的程序,軟件中間層;

OCCI特性

完整支持SQL/PLSQL
爲不斷增加的用戶和請求提供了彈性選項
爲使用用戶自定義類型,如C中的類,提供了無縫接口
支持全部的Oracle數據類型以及LOB types
能夠訪問數據庫元數據
 
  編寫 OCCI 程序的整體流程圖,以下所示:
                                    
 
環境配置方法
 咱們須要以去 Oracle官網下載如下一些組件:
OCCI
Instant Client Package Basic
Instant Client Package SDK

去這個地址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++

  • 安裝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。若是不是的話能夠手動調整一下。 sql

  • 安裝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了。 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 設計

http://blog.csdn.net/echo7l/article/details/6362385

http://www.linuxidc.com/Linux/2012-06/62474p2.htm  

相關文章
相關標籤/搜索