OCI編程自學與總結(1.0)

這段自學 OCI 編程,感覺網上這方面的資料其實也不少,只是不是很容易找到。其實 OCI 沒有想象的那麼複雜,如果你想深究,那應該就只是時間問題。我在網上看到有人這麼寫到,對於 C++ 高手來說 OCI 編程只是簡單的調用接口函數而已。我個人認爲,學習 OCI 編程真的沒那麼難的,如果你想簡單的會使用。

那麼接下來我就這段時間對 OCI 函數的學習及所收集的資料進行整合,用於幫助那些剛剛接觸 OCI 編程的程序員,及 OCI 編程專家做以討論及研究。當然以下貼出的程序雖然都已經在 x86_64-redhat-linux 系統, GCC 版本 4.1.1 20070105 (Red Hat 4.1.1-52) 下通過編譯, OCI 每個函數的參數都有嚴格的類型定義,比較繁瑣,下面的函數示例爲了簡潔說明,沒有對錯誤進行處理,在實際應用中是應該注意的。 但有些個人結論並非正確,還請大家自己進行測驗,得出正確結果後希望給予指正,在下不勝感激。

一、理論:

在這裏不廢話的解釋什麼是 OCI 及 OCI 簡介。不過值得一提的是 OCI 程序的編譯,下邊就先對 OCI 程序怎麼編譯,編譯過程中出現的問題做出詳細解釋。

1 、在此只說 UNIX/LINUX 下 OCI 編程的配置。

在 UNIX 下編譯 OCI 程序需要 3 個必要條件:

(1) 需要 oci.h 文件的所在目錄。一般爲 ORACLE 的安裝目錄: /…/10.2.0/db_1/rdbms/public/ 。

(2) OCI 的靜態鏈接庫文件。靜態庫文件在我這是在用戶目錄下有個 lib 文件夾靜態文件名爲 ora.a ,其目錄是: /user/lib 。

這個靜態文件的生產方式是用戶目錄下有個 OCI 文件夾,目錄爲: /user/oci ,是 ORACLE 的應用程序,直接 make 就可以生產該靜態庫了。 -- 有待考覈

(3) 在編譯時需要再加幾個靜態庫 -lclntsh -lm –lnsl 我想這幾個應該是 ORACLE 數據庫運行 OCI 程序的驅動庫文件吧。如果不加則會提示你程序中所有 OCI 函數找不到其定義。另外還需要加這些庫文件的所在地址。

(4) 另附 makefile 文件

 view plaincopy to clipboardprint?
FLAGS =  -g -m64  
#編譯OCI程序時所用到的頭文件路徑  
INCLUDE_PATH =  /  
        -I ${ORACLE_HOME}/rdbms/demo /  
        -I ${ORACLE_HOME}/rdbms/public /  
        -I ${ORACLE_HOME}/plsql/public /  
        -I ${ORACLE_HOME}/network/public /  
        -I ${ORACLE_HOME}/precomp/public /  
        -I .  
#編譯OCI程序時所用到的靜態鏈接庫路徑  
LIB_PATH = -L${HOME}/billing/lib /  
        -L${ORACLE_HOME}/lib/ /  
        -L${ORACLE_HOME}/rdbms/lib/  
   
#編譯OCI程序時所用到的靜態鏈接庫  
LIBS =/billing/billing/lib/ora.a -lm -lnsl -lclntsh  
   
myoci:myoci.cpp  
        g++ ${FLAGS} -o myoci myoci.cpp ${INCLUDE_PATH}  ${LIBS} ${LIB_PATH}  
clean:  
        rm -f ./core* myoci 
FLAGS =  -g -m64
#編譯OCI程序時所用到的頭文件路徑
INCLUDE_PATH =  /
        -I ${ORACLE_HOME}/rdbms/demo /
        -I ${ORACLE_HOME}/rdbms/public /
        -I ${ORACLE_HOME}/plsql/public /
        -I ${ORACLE_HOME}/network/public /
        -I ${ORACLE_HOME}/precomp/public /
        -I .
#編譯OCI程序時所用到的靜態鏈接庫路徑
LIB_PATH = -L${HOME}/billing/lib /
        -L${ORACLE_HOME}/lib/ /
        -L${ORACLE_HOME}/rdbms/lib/
 
#編譯OCI程序時所用到的靜態鏈接庫
LIBS =/billing/billing/lib/ora.a -lm -lnsl -lclntsh
 
myoci:myoci.cpp
        g++ ${FLAGS} -o myoci myoci.cpp ${INCLUDE_PATH}  ${LIBS} ${LIB_PATH}
clean:
        rm -f ./core* myoci

 注意:以上路徑都是相對路徑,是根據你的 ORACLE 安裝目錄而決定的。在此貼出只是當作參考。 Windows 下 VC++ 的配置和以上步驟差不錯,把相應的所需頭文件及其目錄,靜態文件及其鏈接庫,添加到項目工程的配置裏即可,在此不再一一指出。

2 、句柄層次

OCI 使用各種句柄操作數據庫,環境句柄( Environment Handle )是所有句柄的父句柄。由於貼圖不夠詳細我把相應的 OCI 文檔及資料已經上傳到我的下載中,請下載後進行查閱。
本篇文章來源於:開發學院 http://edu.codepub.com   原文鏈接:http://edu.codepub.com/2009/1228/19152.php

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章