OCI操作oracle数据库
- 格式:doc
- 大小:183.00 KB
- 文档页数:33
oci后缀OCI后缀是指Object Connector Interface的简称,是Oracle公司推出的一种数据库连接技术。
通过OCI,开发人员可以使用各种编程语言与Oracle数据库进行交互,实现数据的读取、写入和修改等操作。
本文将介绍OCI后缀的概念、优势以及使用方法。
一、概念介绍OCI后缀即Object Connector Interface,它是Oracle数据库提供的一种应用编程接口,用于实现程序与数据库的连接和交互。
通过OCI后缀,开发者可以使用C、C++等编程语言来编写与Oracle数据库的应用程序,实现数据的访问和操作。
二、优势分析1. 高性能:OCI后缀采用了Oracle数据库底层的C语言接口,能够直接与数据库进行交互,因此具有较高的性能优势。
相比其他的数据库连接方式,OCI可以更高效地对数据库进行读写操作,提供更好的响应速度和并发性能。
2. 数据安全:OCI后缀支持使用Oracle数据库的安全特性,如数据加密、访问控制等,可以有效保护数据库中的数据安全。
开发者可以通过OCI来实现对敏感数据的加密处理,避免数据泄露和非法访问。
3. 多语言支持:OCI后缀提供了对多种编程语言的支持,如C、C++等。
这意味着开发者可以根据自己的编程习惯和需求,选择合适的编程语言来编写与Oracle数据库的应用程序。
同时,OCI还提供了一系列的开发工具和文档,方便开发者进行开发和调试。
三、使用方法1. 安装OCI驱动程序:在开始使用OCI后缀之前,首先需要安装相应的OCI驱动程序。
可以从Oracle官方网站下载并安装最新的OCI驱动程序,根据操作系统和编程语言选择合适的版本。
2. 配置连接参数:在编写OCI应用程序时,需要正确配置连接参数。
包括数据库的地址、端口、用户名、密码等信息。
使用OCI提供的API或者相关库函数,可以方便地进行连接参数的配置和管理。
3. 连接数据库:使用OCI提供的连接函数,可以与Oracle数据库建立起连接。
Oracle数据库连接的⼏种⽅式⼀、本地通过JDBC获得Oracle数据库连接通过JDBC获得Oracle数据库连接,有三种⽅式:OCI⽅式、thin⽅式和JdbcOdbc桥⽅式。
OCI⽅式依赖于本地的动态链接库,如果在本地安装了Oracle数据库客户端可以采⽤该⽅式;⽽thin⽅式为纯java的数据库连接⽅式;JdbcOdbc桥⽅式依赖于本地ODBC数据库源的配置,这种⽅式⼀般不太被采⽤。
1、OCI⽅式 先在本地安装Oracle客户端,安装完之后,在安装的路径中可以找到…/jdbc/lib/classes12.zip⽂件,我们在环境变量classpath中设置classes12.zip所在的路径。
然后通过以下的数据库连接类,在本地通过OCI⽅式获得Oracle数据库连接。
/*** 在本地获得数据库连接*/package com.j2ee.db;import java.util.*;import java.sql.*;import javax.sql.*;import java.io.*;import oracle.jdbc.driver.*;import javax.naming.*;/*** 通过OCI⽅式获得Oracle数据库连接*/public class DbConnection{ final static String sDBDriver = "oracle.jdbc.driver.OracleDriver"; final static String sConnStr = "jdbc:oracle:oci8:sr/sr@ora199"; /** * */ public DbConnection() { } /** * 获得Oracle数据库连接 */ public java.sql.Connection connectDbByOci() { java.sql.Connection conn=null; try { Class.forName(sDBDriver); conn = DriverManager.getConnection(sConnStr); } catch (Exception e) { System.out.println("ERROR:"+e.getMessage()); } return conn; }}/*** 在本地获得数据库连接*/package com.j2ee.db;import java.util.*;import java.sql.*;import javax.sql.*;import java.io.*;import oracle.jdbc.driver.*;import javax.naming.*;/*** 通过thin⽅式获得Oracle数据库连接*/public class DbConnection{ private String sConnStr = ""; /** * 缺省构造器 */ public DbConnection() { sConnStr = "jdbc:oracle:thin:@10.1.4.199:1521:ora199"; } /** * @param ip,serviceName */ public DbConnection(String ip,String serviceName) { sConnStr = "jdbc:oracle:thin:@"+ip+":1521:"+serviceName; } /** * 通过thin⽅式获得Oracle数据库的连接. */ public java.sql.Connection connectDbByThin() { java.sql.Connection conn=null; try { Class.forName(sDBDriver); conn = DriverManager.getConnection(sConnStr,"sr","sr"); } catch (Exception e) { System.out.println("ERROR:"+e.getMessage()); } return conn; } /** * 通过thin⽅式获得Oracle数据库的连接. * @param userId,password */ public java.sql.Connection connectByJdbc(String userId,String password) { java.sql.Connection conn=null; try { Class.forName(sDBDriver); conn = DriverManager.getConnection(sConnStr,userId,password); } catch (Exception e) { System.out.println("ERROR:"+e.getMessage()); } return conn; }} 这种⽅式运⽤起来⽐较灵活,简单,具有较强的移植性和适⽤性。
收稿日期:2003-12-03基金项目:广东省科技计划项目资助项目(2003C101037);广东省自然科学基金重点资助项目(010421)作者简介:曾志聪(1979 ),男,广东韶关人,硕士研究生,研究方向为计算机网络。
基于OCI 技术的Oracle 数据库连接曾志聪,姚国祥(暨南大学网络中心,广东广州510632)摘 要:Oracle 数据库是目前应用最广泛的数据库之一,基于Oracle 数据库的大型应用对系统响应时间提出了越来越高的要求,如何有效地提高Oracle 数据库的访问效率,减少系统等待时间成为一个热门的研究问题。
文中介绍了Oracle Call In ter face(OCI)技术及其新特性,并通过分析和对比ODBC,JDBC 的实现机理,表明了OCI 技术在访问Oracle 数据库上性能的优越性。
最后描述了OCI 技术的编程机制,用OCI 技术实现了访问Oracle 数据库的典型应用,为OCI 技术的应用提供了技术参考。
关键词:Oracle 调用接口;JDBC 驱动接口;ODBC 驱动接口;Oracle 数据库;数据库接口中图分类号:T P311.138 文献标识码:A 文章编号:1005-3751(2004)08-0011-03Oracle Database Connection Based on OCI TechnologyZENG Zhi cong ,YAO Guo x iang(N etw ork Center of Jinan University,Guang zhou 510632,China)Abstract:Oracle i s one of the most popular databases.As the demand for a shorter response ti m e in large applicati ons based on Oracle database is i ncreasing,how to shorten the response time and effectivel y acces s an Oracle database become a hot topic and gain our research interest.In this paper Oracle call i nterface (OCI )technology and its new features are introduced.T he implementing mechanism of ODBC,JDBC and OC I are compared to show the better performance of OC I on accessing an Oracle database.Finally,the mechanism of OCI programming is particularly described and some typical functions implemented with OC I for accessing Oracle databases are provided for references.Key words:OCI;JDBC;ODBC;Oracle;database API0 引 言Oracle Call Interface(OCI)是Ora cle 的数据库调用接口。
ocidefinebypos rowid 的列数-回复"ocidefinebypos rowid 的列数"的主题是如何使用"ocidefinebypos rowid"来确定列数。
本文将分步回答该问题。
一、概述"ocidefinebypos rowid"是Oracle数据管理系统的一个命令。
通过使用这个命令,可以确定一个表或视图的列数。
下面将详细介绍如何使用该命令来实现这一目的。
二、了解"ocidefinebypos rowid"1. ocidefinebyposocidefinebypos是Oracle数据库中的一个命令,用于定义或绑定一个指定的位置(pos)到某个变量。
该命令在OCI程序实现中常用,用于查询结果的绑定。
2. rowidrowid是Oracle数据库中的一种特殊数据类型,用于表示数据库表中行的逻辑标识符。
每一行都具有唯一的rowid。
通过rowid,可以直接访问数据库表中的特定行。
三、使用"ocidefinebypos rowid"确定列数的步骤使用"ocidefinebypos rowid"命令确定一个表或视图的列数,需要按照以下步骤进行操作:1. 连接到Oracle数据库在使用"ocidefinebypos rowid"命令之前,需要先连接到相应的Oracle数据库。
可以使用SQL*Plus或者其他支持OCI编程的工具进行连接。
连接成功后,可以使用OCI函数来实现"ocidefinebypos rowid"命令。
2. 准备OCI程序准备OCI程序的开发环境,例如,安装相应的OCI库文件和头文件,并进行适当的配置。
可以使用C、C++或其他支持OCI编程的语言来创建OCI程序。
3. 编写OCI程序在OCI程序中,需要包含oci.h头文件,并链接相应的OCI库。
用oci开发oracle数据库的方法OCI是Oracle提供的一种基于C/C++语言的接口,用于访问Oracle数据库。
在OCI开发的过程中,可以使用OCI提供的函数来执行各种类型的数据库操作。
本文将介绍OCI开发Oracle数据库的一般步骤。
1. 安装Oracle数据库客户端在使用OCI开发Oracle数据库之前,您需要安装Oracle数据库客户端。
Oracle客户端包含OCI库和头文件。
建议使用与目标Oracle数据库版本相同的客户端。
2. 配置开发环境为了使用OCI进行开发,你需要在你的开发环境中配置相关的Oracle环境变量。
设置ORACLE_HOME和LD_LIBRARY_PATH环境变量,以便OCI库和头文件所在的目录被正确找到。
3. 设置OCI环境使用OCI开发Oracle数据库之前,需要创建OCI环境和错误处理器。
OCI环境是OCI函数调用所需的上下文信息,可通过OCIEnvCreate函数创建。
OCIEnvCreate函数需要连接模式和错误处理器作为输入参数。
4. 连接到Oracle数据库在使用OCI连接Oracle数据库之前,您需要知道以下信息:· Oracle数据库的SID或服务名称;· 数据库主机名或IP地址;· 使用的端口号;· 连接的用户名和密码。
您可以使用OCI函数OCILogon或OCIConnect来连接Oracle数据库。
其中OCILogon函数使用数据库SID或服务名来连接数据库,而OCIConnect函数使用主机名、端口号和服务名称。
5. 执行SQL语句使用OCI函数OCIStmtPrepare和OCIStmtExecute来执行SQL语句。
OCIStmtPrepare用于准备一个SQL语句的执行,而OCIStmtExecute函数用于实际执行该SQL语句。
执行SQL语句可能涉及到绑定参数和获取结果集,您可以使用OCI函数OCIBindByPos、OCIDefineByPos和OCIStmtFetch来完成这些操作。
OCI(Oracle Call Interface)是Oracle公司提供的由头文件和库函数等组成的一个访问Oracle数据库的应用程序编程接口(Application Programming Interface,API)。
它允许开发人员在第三代编程语言(包括C, C++, COBOL与FORTRAN)中通过SQL(Structure Query Language)来操纵Oracle数据库。
OCI是一种开放标准,其规范被广泛应用于各种应用程序开发,使得不同的软件和系统可以相互协作。
OCI接口标准提供了一组通用的函数和协议,用于与Oracle数据库进行交互。
这些函数和协议使得开发人员可以执行SQL查询、管理数据库连接、处理数据等操作。
OCI接口标准具有以下特点:
跨平台性:OCI接口标准可以在不同的操作系统和硬件平台上使用,使得开发人员可以轻松地在不同的环境中开发和部署应用程序。
高效性:OCI接口标准提供了高效的数据库访问机制,可以快速地执行SQL 查询和处理数据。
安全性:OCI接口标准提供了安全机制,可以保护应用程序和数据库免受攻击。
灵活性:OCI接口标准提供了丰富的函数和协议,可以满足各种不同的应用程序需求。
总之,OCI接口标准是一种广泛使用的应用程序编程接口,它为开发人员提供了与Oracle数据库交互的便捷方式,同时也为应用程序的开发和部署提供了灵活性和高效性。
orcale应用技巧大多数应用程序使用 OCI 的ODAC 标准方式来连接 Oracle 数据库服务器。
这是使用第三方开发语言设计 Oracle 应用程序最常用的方法。
所有的 OCI 接口都作为内部库来使用,使得编译生成的应用程序非常小。
但是,这需要在客户机上安装 Oracle 客户端软件,这使得安装和管理要花费额外的开销。
有时,安装 Oracle 客户端程序甚至是不可能的。
例如,如果你需要在远程计算机上设置你的应用程序,你不能提供特殊的文件支持。
ODAC Net 允许你的应用程序直接通过 TCP/IP 协议来连接 Oracle,而不需要 Oracle 客户端软件。
运行使用 ODAC Net 的应用程序,仅需要有一个支持 TCP/IP 协议的操作系统。
使用 ODAC Net 连接 Oracle 服务器,你需要知道 Oracle 服务器的地址,监听端口号以及数据库实例名称。
在你的应用程序中使用 Net 选项前,你只需要设置 TOraSession 对象的选项 Net 为True 且指定它的Server 属性为指定的数据库。
如果使用 ODAC 的标准方式通过 OCI 来连接数据库,你必须设置 Server 属性为 TNS 别名,但现在使用 ODAC 的 Net 选项,你只需要指定数据库字符串,格式如下: Host:Port:SID.这里, Host 指服务器地址, Port 指服务器监听端口号, SID 指特定的系统实例名称。
这里有个例子示范不使用 OCI 而连接数据库:varSession: TOraSession;. . . := True;ername := 'Scott';Session.Password := 'tiger';Session.Server := '205.227.44.44:1521:orcl';Session.Connect;注意:这些是你的应用程序要支持 Net 选项时所必须的。
目前,Oracle应用程序可以在VB、Delphi等高级开发语言中开发,也可以以C++开发,或者Java语言开发,甚至可以通过ASP、JSP、Perl等脚本语言来访问Oracle。
这些语言环境各有其优势,C++无疑是追求极致速度的首选。
在C++中我们也可以有多种接口方式,可以使用ADO通用接口,可以使用OCI/OCCI,还可以使用ODBC、OO4O及OLEDB等方式。
在这些方式中,ADO与OCI是应用最为广泛的两种方式,本文将集中力量介绍在Visual C++ 6.0 中这两种接口的开发方法及它们的特点对比。
一、ADO开发接口简介ADO(ActiveX Data Objects,ActiveX数据对象)是Microsoft为强大的数据访问接口OLEDB(对象链接和嵌入数据库)而设计的,是一个便于使用的应用层的编程接口。
使用ADO编写的应用程序可以通过OLEDB提供者访问和操作数据库服务器中的数据。
ADO 最主要的优点是易于使用、可以访问多种数据库及可以在多种语言中开发。
由于ADO 建立在自动化(Automation)的基础上,所以ADO的应用场合非常广泛,不仅可在Visual Basic 这样的高级语言开发环境中使用,还可以在一些脚本语言中使用,这对于开发Web应用和在ASP(Active Server Page,动态服务器主页)的脚本代码中访问数据库提供了操作应用的捷径。
ADO是以OLE DB为基础,它对OLE DB进行了封装,所以ADO其实是OLE DB的应用层接口,是介于OLE DB与应用程序之间的中间层。
这种结构为一致的数据访问接口提供了很好的扩展性,不再局限于特定的数据源,只要OLE DB支持的数据源,ADO都可以很好地支持。
ADO的另一个特性是使用简单,它封装了OLE DB的复杂的接口,以Connection、Recordset、Command三个主体对象及Errors、Properties、Parameters和Fields四个集合对象搭建起了ADO对象模型。
C#连接oracle数据库报错:OCIEnvCreate失败,返回代码为-1,但错误消息⽂本不可⽤原因⼤概是OracleOraDb11g_home1TNSListener服务没启动的原因步骤⼀、停⽌并重新启动OracleOraDb11g_home1TNSListener服务,试⼀下是否可⾏。
如在启动此服务出现“本地计算机上的OracleOraDb11g_home1TNSListener服务启动后停⽌。
某些服务在未由其它服务或程序使⽤时将⾃动停⽌。
” 应该是Oracle的ORACLE_HOME出现问题,打开环境变量,找到系统变量中的ORACLE_HOME,把值改为ORACLE的安装⽬录,如下路径:E:\app\Administrator\product\11.2.0\dbhome_1再重新启动OracleOraDb11g_home1TNSListener服务,发现可以成功启动。
步骤⼆、再次启动C#软件出现了新报错:ORA-12541: TNS: ⽆监听程序解决⽅法:开始-->所有程序-->Oracle OraDb11g_home1--配置和移植⼯具--Net Configuration Assistant,重新配置.如下图。
步骤三、再次启动C#软件发现⼜出现如下报错:ora-12514:TNS:监听服务当前⽆法识别描述中的请求服务原因:没有注册监听器解决⽅法:E:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN中的listener.ora修改如下所⽰:# listener.ora Network Configuration File: e:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora# Generated by Oracle configuration tools.SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = CLRExtProc)(ORACLE_HOME = e:\app\Administrator\product\11.2.0\dbhome_1)(PROGRAM = extproc)(ENVS = "EXTPROC_DLLS=ONLY:e:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")))LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))))ADR_BASE_LISTENER = e:\app\Administrator再次重启服务,重启C#软件发现已经可以连上ORACLE数据库!步骤四、注意:如果⽤C#写的客户端可以访问ORACLE数据库,但是⽤C#写的webservice却访问不了oracle数据库,并报错:OCIEnvCreate 失败,返回代码为 -1,但错误消息⽂本不可⽤解决⽅法:找到ORACLE的安装⽬录如:app\ ,右键此⽂件,属性,web共享,此处找到已发布的webservice,并添加共享。
OCI简介1.OCI概述OCI(Oracle Call Interfce,即Oracle调用层接口)是Oracle公司提供的由头文件和库函数等组成的一个访问Oracle数据库的应用程序编程接口(application programming interface API),它允许开发人员在第三代编程语言(包括C,C++,COBOL与FORTRAN)中通过SQL(Structure Query Language)来操纵Oracle数据库,而且OCI在一定程度上支持第三代编程语言(诸如C,C++,COBOL与FORTRAN)的数据类型、语法等等。
OCI的显著特点是全面支持Oracle的面向对象技术,同时OCI 还具有如下的一些特点:1)非常有利于应用程序的设计;2)高度控制应用程序的执行;3)允许开发人员应用已熟悉的第三代程序设计语言来应用OCI;4)支持动态SQL;5)几乎所有的Oracle的开发工具都支持OCI;6)通过回调技术(callbacks)来实现动态绑定与定义;7)通过OCI的描述函数可以获取Oracle数据库的各种参数;8)增强了数组在DML(data manipulation language)语言中的应用;OCI接口支持Windows NT和Windows 95/98/2O0o/xP操作系统,它所支持的C语言编译器包括Borland C++和MicrosoftVisualC++等。
在使用OCI开发Oralce数据库应用程序之前,应首先安装这些操作系统和C语言编译工具。
在选择安装OCI开发工具包后,Oracle安装程序将OCI文件拷贝到oracle主目录内的以下子目录中:.. BIN\:执行文件和帮助文件:..\OCIINCLUDE头文件;.. OCI\LIB\其中包含仍bc和\msvc两个子目录,分别用于存储支持Borland C++和MicroSoflVisualC++的OCI库文件,这些库文件与OCI源程序编译后所产生的目标文件进行链接生成可执行程序。
一个应用OCI程序的生成可执行应用程序的过程如图1:图由此,我们可以看出:一个应用OCI的应用程序与其它不连接数据库的应用程序生成可执行程序的过程没有区别,在程序的链接阶段OCI库与源程序的目标代码文件链接而生成可执行程序。
2.OCI程序的基本结构在一个应用程序中,我们是通过调用OCI提供的库函数来实现对Oracle数据库的操纵。
OCI提供了上百个函数,都是以OCI开头的函数,比如创建OCI环境的OCI函数:OCIEnvCreate()。
OCI函数的一个特点或者说是难点就是它的参数特别多,函数往往都有十几个参数。
一般情况下,一个OCI应用程序都是在多用户环境下的。
在一个n层网络结构的配置中,客户端的应用程序需要完成一些数据操纵,包括交换数据与处理数据。
一个OCI应用程序的基本结构包括:1)初始化OCI环境和线程;2)分配必要的句柄与数据结构;3)建立与数据库的连接以及创建用户会话;4)通过SQL与Oracle服务器交换数据,而后再做数据处理:5)结束用户会话与断开与数据库的连接;6)释放在程序中所分配的句柄。
示意如图2。
3.在OCI应用程序中执行SQL的步骤结构化查询语言(SQL Structure Query Language)是操纵关系数据库的主流语言,目前,几乎所有的商业数据库软件都支持SQL语言。
标准的SQL语言按照它的功能不同,可以分为查询、操纵、定义以及控制四种类型。
每一种都有若干关键字,具体如表1所示。
一个SQL语句在OCI应用程序中的执行步骤一般如下:1)准备SQL语句。
调用函数OCIStmtPrepare();2)在SQL语句中绑定需要输入到SQL语句中的变量。
对于DML语句来说,由于它带有输入变量,我们可以通过调用一个或者多个函数OCIBindByPos()、OCIBindByName()等把输入变量的地址绑定在DML语句中的占位符中;3)执行SQL语句。
调用OCIStmtExecute()函数。
对于DDL语句到这一步就完成了一个语句的执行;4)描述SQL中的输出的数据。
如果有必要的话,我们可以调用函数OCIParamGet()与OCIAttrGet()来获取我们所读取的记录的字段个数、字段的数据类型以及字段数据定义的最大长度。
5)定义输出变量。
对于DQL(Data Query Language)语句,即SELECT的查询语句,需要定义一定数量的变量用来接受所选择列的数据。
我们可以调用OCIDeflneByPos()、OCIDefineObject()函数等来完成这个任务。
也就建立SQL 语句所返回的数据与应用程序中变量的关系。
6)获取数据。
我们可以调用函数OCIStmtFetch()来把用SELECT选中的记录的数据赋予应用程序中的变量。
过程以及过程中调用到的函数如图3所示:虽然Oracle对标准的SQL语言有所扩展,但它也是建立在标准的SQL语言的基础之上。
上图是一个一般SQL执行的流程图,对于不同的SQL语句,所需要的步骤也有所不同。
对于DCL与DDL语句,由于没有数据的输入与输出,仅仅涉及到一些权限与定义或者删除数据库中的对象的问题,因此只需要上图的第一步与第三步便可以了。
而对于DQL与DML语句,由于有数据的输入与输出,因此需要的步骤就多一些。
其实,DML也可以只用两步来完成。
这是因为DML语句中仅仅涉及数据的输入(即,数据从应用程序到数据库端),因此我们可以把所要输入的数据以字符串的形式放在SQL语句中。
而DQL不仅可能有数据输入,而且也有数据输出(从数据库端到应用程序),因此,一个DQL语句需要如上图的六个步骤。
OCI环境配置Oracle oci工具包安装:$ORACLE_HOME\BIN:执行文件和help文件$ORACLE_HOME\OCI\INCLUDE:头文件$ORACLE_HOME\OCI\LIB\BC: for Borlanf C++的OCI库$ORACLE_HOME\OCI\LIB\MSVC: for MS Visual C++的OCI库如果是unix下,对于ORACLE8i,则OCI库在$ORACLE_HOME/lib下,如果是9i,则在$ORACLE_HOME/lib32下,库文件名一般为libclntsh.so以上所有过程,只需安装一个oracle客户端,oci的所有头文件和库文件全部包含在内,VC开发时只需包含指定的头文件,引用相关库即可。
OCI实现操作oracle数据库1.创建OCI环境即创建和初始化OCI工作环境,其他的OCI函数需要OCI环境才能执行。
2.需要申请的句柄类型OCI环境句柄: OCI_HTYPE_ENV—它定义所有OCI函数的环境调用环境,是其他句柄的父句柄。
(由OCIEnvInit或OCIEnvCreate生成)错误句柄:OCI_HTYPE_ERROR—作为一些OCI函数的参数,用来记录这些OCI函数操作过程中所产生的错误,当有错误发生时,可用COIErrorGet()来读取错误句柄中记录的错误信息。
服务器环境句柄:OCI_HTYPE_SVCCTX—定义OCI调用的服务器操作环境,它包含服务器、用户会话和事务三种句柄。
服务器句柄:OCI_HTYPE_SERVER—标识数据源,它转换为与服务器的物理连接。
用户会话句柄:OCI_HTYPE_SESSION—定义用户角色和权限及OCI调用的执行环境。
事务句柄:OCI_HTYPE_TRANS—定义执行SQL操作的事务环境,事务环境中包含用户的会话状态信息。
语句句柄:OCI_HTYPE_STMT—是一个标识SQL语句或PL/SQL块,以及其相关属性的环境。
Bind/Define句柄:属于语句句柄的子句柄,由OCI库隐式自动生成。
用户不需要自己再申请,OCI输入变量存储在bind 句柄中,输出变量存储在定义句柄中3.句柄属性包括服务器环境句柄属性:(OCI_HTYPE_SVCCTX)OCI_ATTR_SERVER—设置/读取服务环境的服务器环境属性OCI_ATTR_SESSION—设置/读取服务环境的会话认证环境属性OCI_ATTR_TRANS—设置/读取服务环境的事务环境属性用户会话句柄属性:(OCI_HTYPE_SESSION)OCI_ATTR_USERNAME—设置会话认证所使用的用户名OCI_ATTR_PASSWORD—设置会话认证所使用的用户口令服务器句柄:(OCI_HTYPE_SEVER)OCI_ATTR_NOBLOCKING_MODE—设置/读取服务器连接:=TRUE时服务器连接设置为非阻塞方式语句句柄:(OCI_HTYPE_STMT)OCI_ATTR_ROW_COUNT—只读,为当前已处理的行数,其default=1OCI_ATTR_STMT_TYPE—读取当前SQL语句的类型:Eg :OCI_STMT_BEGINOCI_STMT_SELECTOCI_STMT_INSERTOCI_STMT_UPDATEOCI_STMT_DELETEOCI_ATTR_PARAM_COUNT—返回语句选择列表中的列数4.关于输出变量定义如果在语句执行前就知道select语句的选择列表结构,则定义输出操作可在调用 OCISTMTExecute前进行,如果查询语句的参数为用户动态输入的,则必须在执行后定义。
5.OCI函数返回值OCI_SUCCESS –函数执行成功 (=0)OCI_SUCCESS_WITH_INFO –执行成功,但有诊断消息返回,可能是警告信息OCI_NO_DATA—函数执行完成,但没有其他数据OCI_ERROR—函数执行错误OCI_INV ALID_HANDLE—传递给函数的参数为无效句柄,或传回的句柄无效OCI_NEED_DATA—需要应用程序提供运行时刻的数据OCI_CONTINUE—回调函数返回代码,说明回调函数需要OCI库恢复其正常的处理操作OCI_STILL_EXECUTING—服务环境建立在非阻塞模式,OCI函数调用正在执行中。
6.OCI连接有二种方式Blocking(阻塞方式)和non_Blocking(非阻塞方式),阻塞方式就是当调用 OCI 操作时,必须等到此OCI操作完成后服务器才返回客户端相应的信息,不管是成功还是失败。
非阻塞方式是当客户端提交OCI操作给服务器后,服务器立即返回OCI_STILL_EXECUTING信息,而并不等待服务端的操作完成。
对于non-blocking方式,应用程序若收到一个OCI函数的返回值为 OCI_STILL_EXECUTING时必须再次对每一个OCI函数的返回值进行判断,判断其成功与否。
可通过设置服务器属性为OCI_ATTR_NONBLOCKING_MODE来实现。