【摘 要】文章对比了Unix下几种访问Oracle数据库的访你问方式的同时,深入介绍了通过OCI接口对数据库的操作方法,并给出了具体实例。另外,例子中通过对OCI函数的封装极大地方便了对Oracle数据库的操作。
【关键词】Oracle;OCI;数据库
引言
Unix的稳定性好,又具有成本低、维护性好与扩展性高的优点,使其成为服务器的首选。Unix和Oracle数据库的结合已成为金融、电信、国防等通信实时性、安全稳定性要求高的领域的服务器的首选。
Unix下提供了多种Oracle通信接口,考虑到底层开发和平台的可移植性,用C语言开发是最好的选择。目前比较常用的接口方式有pro*c/c++,ODBC和OCI三种方式,每一种方式都各有其优缺点,本文重点介绍C语言通过OCI接口来访问Oracle数据库的过程。
一、OCI开发接口简介
OCI是Oracle数据库调用接口,是由用于开发前端应用程序及中间件的C/C++开发类库。通过OCI,我们可以控制所有类型的SQL语句的执行,包括控制语句(会话、事务、系统)、DDL、DML、查询、PL/SQL,以及嵌入式SQL。
OCI能最大程度控制程序的运行,执行Oracle服务器所允许的所有数据库的操作,可以访问Oracle数据库服务器里的所有数据类型,可以用引用的方式访问对象及元数据,还可以动态地获取、修改对象属性值。综上所述,OCI程序既具有SQL非过程性的优点,也具有第三代程序设计语言的过程性和灵活性,使开发的产品具有很强的数据处理能力。
同时,OCI在所有能够运行Oracle的平台上具有很好的可移植性,程序不需要太大的修改即可运行在Linux/Unix/Windows甚至嵌入式环境下。OCI还是其它Oracle开发接口的底层实现,少了很多封装,可以提供Oracle与应用程序的直接连接,因此OCI能够提供最佳的性能。
二、Oracle下基于OCI实现数据库访问
(一)OCI程序的基本结构
OCI是由头文件和库函数等组成的一个访问Oracle数据库的应用程序编程的接口,它允许使用人员在第三代编程语言(如C,C++,FORTRAN与COBOL)中通过SQL语句来操纵Oracle数据库。
在一个应用程序中,我们主要是通过调用OCI提供的库函数来实现对Oracle数据库的操纵的。OCI提供了很多函数,都是以OCI开头的。
一般情况下,一个OCI应用程序是在多用户的环境下的。在一个n层网络结构配置中,客户端的应用程序需要完成一些数据的操纵,包括处理数据与交换数据。一个OCI应用程序的基本结构包括:
(1)初始化OCI的环境和线程;(2)分配需要的句柄和数据结构;(3)建立和数据库的连接,创建用户会话;(4)通过SQL与Oracle服务器来交换数据、做数据处理;(5)结束用户会话,断开与数据库的连接;(6)释放程序中分配的句柄。
(二)在OCI应用程序中执行SQL的步骤
一条SQL语句在OCI应用程序中执行步骤一般情况如下:
(1)准备SQL语句。
(2)在SQL语句中绑定输入到SQL语句中的变量。对于DML语句来说,由于它带有输入变量,所以我们可以通过调用一个或多个函数OCIBindByName()、OCIBindByPos()等把输入变量的地址绑定到DML语句中的占位符中。
(3)执行SQL语句。调用OCIStmtExecute()函数,对于DDL语句到这一步就完成了一条语句的执行。
(4)描述SQL语句中的输出数据。我们可以通过调用函数OCIAttr-
Get()与OCIParamGet()来获取我们所读取的记录的字段个数、字段的数据类型以及字段数据定义的最大长度。
(5)定义输出变量。对于DQL语句,需要定义变量用来接收所选列的数据。我们可以调用OCIDeflneByPos()、OCIDefineObject()等函数来完成这个任务。
(6)获取数据。我们可以调用函数OCIStmtFetch()来把用SELECT选中数据赋予应用程序中的变量。
三、OCI实现操作Oracle数据库的编程实例
本实例在Unix下执行,通过将OCI函数进行封装来完成对Oracle数据库的各种操作,其中包括Oracle数据库的连接,SQL语句的执行,本实例主要是Select语句的实现,将结果输出,以表test_t(id,name)为例。
封装的函数_DB_Connect用来实现数据库的连接,_DB_Select用来执行SQL语句,_DB_FetchData用来逐条查询数据,_DB_Disconnect用来断开和数据库的连接。下面简单介绍实例的执行过程和结果:
1.执行makefile文件,生成可执行程序:
2.执行可执行程序,输出查询结果:
参考文献:
[1]庞维翰,陈有青.用OCI封装类进行数据库间应用系统的移植[J].计算机工程与应用,2005(29):3.
[2]范严军.强大的微机UNIX平台—Solaris[J].软件世界,1996(4):4.
[3]黄伟.ORACLE与C语言通过调用接口的实现[J].计算机与数字工程,2005(5).
作者简介:
关锐(1985—),女,山西运城人,长安大学信息工程学院计算机软件与理论专业硕士研究生,研究方向:数据仓库与数据挖掘。
郑景(1986—),男,长安大学信息工程学院计算机软件与理论专业硕士研究生。