ORACLE调用接口(OCI)简介及重要函数流程介绍

【文章摘要】
对于实现用户开销户的程序来说,与数据库进行交互是必不可少的。为了实现用户数据的存放、读取、删除等操作,我们需要频繁地访问数据库,这就对数据库的访问模式提出了较高的要求。ORACLE数据库具有系统可移植性好、使用方便、功能强等特点,因此在实际的软件开发项目中使用得非常的广泛。为了方便C语言程序操作ORACLE中的数据,ORACLE调用接口(OCI)应运而生。

本文首先简单介绍了OCI的基本情况,然后对OCI中两个重要的程序流程进行了一定的介绍。希望大家通过此文,能够对OCI有一个大致的了解。

一、OCI简介
在通常的情况下,大家是通过在客户端(如PLSQL Developer)中输入SQL语句来对数据库中的数据进行操作的。那么,如果我们想在C程序中实现对数据库的操作,该如何处理呢?ORACLE数据库提供了一个第三代程序设计语言的接口,用户可以通过C语言来编程访问数据库。

OCI(Oracle Call Interface)就是为了实现高级语言访问数据库而提供的接口,它允许开发者使用高级语言来编写程序,并通过该接口来访问数据库。

简而言之,OCI是由一组应用程序开发接口(API)组成的,ORACLE提供API的方式是提供一组库。在这组库中,包含了一系列的函数调用,如连接数据库、调用SQL等。

利用OCI,C程序访问ORACLE数据库的模式如图1所示。

图1 C程序访问ORACLE数据库的模式

二、OCI中常用函数简介
OCI提供了一组完备的功能集合,可以实现创建数据库连接、关闭数据库连接、执行SQL语句或存储过程、获取SQL语句或存储过程的执行结果、获取数据库空间大小等功能。

常用函数及其功能如表1所示(注:不同版本的OCI文件中的函数名可能会不一样,但功能都是一致的):

表1 OCI常用函数及其功能

三、OCI中重要函数流程介绍
为了让大家了解OCI的流程,我们对OCI中两个重要的函数流程进行分析。如果大家想要对OCI进行深入的理解,请阅读OCI源码。

1 CreateDb流程

图2 CreateDb流程

有关CreateDb流程,要注意在初始化数据库连接之前,需要对程序进行加锁处理,待结果集创建成功之后,再解锁。

2.ExecuteSql流程

图3 ExecuteSql流程

有关ExecuteSql流程,要注意在执行完SQL语句之后,要释放本次的数据库连接。

四、总结
OCI作为C程序访问ORACLE数据库的桥梁,为大家操作数据库提供了很大的方便,这也算是ORACLE公司对软件设计的一大贡献了。对于开发应用软件的程序员来说,做到会调用OCI提供的API也就足够了。但是,如果大家想对OCI有比较深入的了解,还是要阅读其源码,这里提供一个源码下载的链接:http://download.csdn.net/detail/will___/4051884

时间: 2024-09-11 07:07:36

ORACLE调用接口(OCI)简介及重要函数流程介绍的相关文章

Oracle调用接口(OCI)源码剖析(2):执行SQL语句并获取结果

概述 接着上一篇文章<Oracle调用接口(OCI)源码剖析(1):创建数据库连接>,我们继续对OCI中执行SQL语句并获取结果的源码进行剖析.该操作主要是由两个函数完成的:CDbExecSql和CDbFetch,其中CDbExecSql函数用于执行普通SQL语句,CDbFetch函数用于获取数据库的返回结果. 下面对这两个函数的源码进行分析. OCI中执行SQL语句并获取结果的源码剖析 1.执行普通SQL语句的操作 在OCI中,执行普通SQL语句的操作是由CDbExecSql函数实现的,其代

Oracle调用接口(OCI)源码剖析(1):创建数据库连接

概述 在笔者所开发过的产品中,有很多都需要与Oracle数据库打交道.为了实现C代码与Oracle数据库的消息交互,Oracle公司为广大的开发者们提供了一个统一的调用接口OCI(Oracle Call Interface).只要按照规范来调用OCI中的函数,就能够实现C代码与Oracle数据库的交互. 具体而言,OCI的C语言API包括了两个文件:db_ora_oci_ux.h和db_ora_oci_ux.c.db_ora_oci_ux.h是头文件,而所有与数据库的交互操作的实现都是在db_o

Oracle调用接口(OCI)源码剖析(3):关闭数据库连接

概述 继创建数据库连接和执行SQL语句并获取结果之后,我们继续对OCI中关闭数据库连接的源码进行剖析.该操作主要是由CDbCloseDb函数完成的. 下面对这个函数的源码进行分析. OCI中执行关闭数据库连接的源码剖析 在OCI中,CDbCloseDb函数的代码如下: void CDbCloseDb(void *hDb) { CDb *pCDb = NULL; if (NULL == hDb) { return; } pCDb = (CDb *)hDb; DoDbFree(pCDb->hdbc)

OCI 简介

文章整理自网络: oci - 简介        OCI(Oracle Call Interface)是ORACLE公司开发的一个应用程序开发工具,是一个通过访问Oracle数据库的服务器,控制各类SQL语句的执行,进而创建应用程序的的应用程序接口(API).它支持SQL所有的数据定义,数据操作,查询,事务管理等操作,支持C和C++的数据类型,调用,语法和语义.它提供了一组可对Oracle数据库进行存取的接口子例程(函数).        OCI程序实质上就是用高级语言写的程序,其特点是内部含有

oracle-OCI连接Oracle调用OCISessionBegin失败:ORA-24314: 未初始化服务句柄

问题描述 OCI连接Oracle调用OCISessionBegin失败:ORA-24314: 未初始化服务句柄 OCI连接Oracle数据库的时候,建立会话连接OCISessionBegin就失败:Error code为:ORA-24314: 未初始化服务句柄.而使用PL/SQL Developer连接Oracle就可以,进去PL/SQL Developer里面也可以执行SQL语句. 解决方案 小弟是小白,刚看C++如何操作Oracle,看网博上有那么一段代码就整下来试试,没什么经验,严重被打击

中科院分词工具2015c++调用接口

问题描述 中科院分词工具2015c++调用接口 //我想在运行时//输入要分词的文件名和生成的文件名//要怎样写呀c++的 #include#include ""NLPIR.h""#pragma comment(libNLPIR.lib"")using namespace std; int fen(){ if(!NLPIR_Init()) { printf(""failsn""); return 0; }

C# 如何调用C++dll 类的成员函数?(请大家指教一二)

问题描述 C#如何调用C++写的MFCDLL中某一类的成员函数呢?eg...C++MFCDLL中有一个类的公共成员函数:CDllClass::icanseeu()...C#应用程序如何调用此函数....求助....先谢啦!!! 解决方案 解决方案二:实现不了解决方案三:C++自己调用都是问题,何况是其他语言解决方案四:实现不了.解决方案五:那怎么办,,,有没什么办法可以解决的...如果是一个C++的普通函数就可以调用的,(已实现)一个C++的类成员函数要怎么办?难不成把C++代码转换为C#代码?

C++调用C++写的DLL回调函数,只能传递第一个参数

问题描述 好不容易能够实现回调了,结果验证数据的时候发现,最后执行到DoWhile_Get_StatusChange的时候,本来是两个int参数的,只有第一个的值传递了过来,第二个参数的值一直是0.不知道是啥原因了C++的DLL里面是这样的代码aaaa_Lib.cpp//-------------------------------------------------------------------------------//声明typedefbool(CALLBACK*Connection

并发串行调用接口

这里思考比较少,不过因为事情本身比较简单,就简单处理了.毕竟我这种菜鸟,高大上的东西是从未停止过仰望的.备注下是因为如果有机会再用到类似的逻辑,可以拿来重新思考一下,另外,我还觉得有点儿TCP里"滑动窗口"的感觉喔,哈哈哈,毕竟场景类似,控制流量嘛 /** * 代码块说明: 小并发串行调用接口处理大批量数据 * 依赖变量: data (原始数据) */ var chunks = [], // 数据切割存储 size = 50, // 数据分片大小 concurrence = 4; //