OCI编程自学与总结(一)

本文是作者关于Oracle OCI编程的自学总结,主要介绍了UNIX/LINUX环境下OCI程序的配置,包括OCI程序的编译步骤和所需的头文件、静态库。文中详细讲解了连接ORACLE数据库的流程,包括句柄层次和环境句柄的创建。此外,提到了OCI编程的基本理论,如句柄类型和属性。全文旨在帮助初学者理解和入门OCI编程。
摘要由CSDN通过智能技术生成

本人允许自由散发此文档,但对其进行的任何修改应通知作者,以便于维护版本。

原作:卡卡西       日期:2009年12月25日   注意事项:在转载本技术文章时请保护作者的署名权、著作权及专属权。谢谢!

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

 

oci函数的详细介绍 和应用实例 OCI 连接过程比较复杂,除了分配设置各个基本句柄外,还要明确彼此之间的联系,大致流程如下: 创建环境句柄: OCIEnvCreate(&envhp;, …); 创建一个指定环境的错误句柄: OCIHandleAlloc((dvoid *)envhp, (dvoid **)&errhp;,…); 创建一个指定环境的服务器句柄: OCIHandleAlloc((dvoid *)envhp, (dvoid **)&servhp;,…); 建立到数据源的访问路径 : OCIServerAttach(servhpp, errhpp,…); 创建一个指定环境的服务上下文句柄: (void) OCIHandleAlloc((dvoid *)envhpp,…); 为指定的句柄及描述符设置特定的属性: (void) OCIAttrSet((dvoid *)svchpp,…); 创建一个指定环境的用户连接句柄: (void) OCIHandleAlloc((dvoid *)envhpp,…); 为用户连接句柄设置登录名及密码: (void) OCIAttrSet((dvoid *)usrhpp,…); 认证用户建立一个会话连接: OCISessionBegin(svchpp, errhpp,…); 创建一个句子句柄: OCIHandleAlloc((dvoid *)envhpp,…);s 准备 SQL 语句: OCIStmtPrepare(stmthpp, errhpp,…); 绑定输入变量: OCIBindByPos(stmtp &hBind;, errhp,…); 绑定输出变量: OCIDefineByPos(stmthpp, &bhp1;, errhpp,…); 获得 SQL 语句类型: OCIAttrGet ((dvoid *)stmthpp, (ub4)OCI_HTYPE_STMT,…); 执行 SQL 语句: OCIStmtExecute(svchpp, stmthpp,…); 释放一个会话: OCISessionEnd(); 删除到数据源的访问 : OCIServerDetach(servhpp, errhpp, OCI_DEFAULT); 释放句柄: OCIHandleFree((dvoid *) stmthpp, OCI_HTYPE_STMT);
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值