这段自学 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