這段自學 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