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

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