OCI接口学习笔记--基本理解(二)

本文介绍了Oracle OCI接口的安装路径,详细阐述了数据库OCI操作的基本流程,包括环境初始化、句柄分配、数据库连接、会话创建、SQL执行等步骤,并提供了一段简单的C++代码示例,展示了如何使用OCI进行查询和新增操作。
摘要由CSDN通过智能技术生成

一. 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++的CI库
如果是unix下,对于ORACLE8i,则OCI库在$ORACLE_HOME/
lib下,如果是9i,则在$ORACLE_HOME/lib32下,库文件名一般为libclntsh.so

二、一个数据库OCI操作一般流程

  • 初始化OCI环境
  • 申请句柄
  • 连接数据库
  • 创建会话
  • 执行SQL操作(在这个过程中包括:(1)准备SQL语句。(2)在SQL语句中绑定需要输入到SQL语句中的变量。(3)执行SQL语句。(4)获取SQL中的输出描述。(5)定义输出变量。(6)获取数据)
  • 断开会话
  • 断开服务器
  • 释放资源

三、实例分析

先通过一段较为简单的代码大致理解一下OCI编程:

  1. #include <oci.h>
  2. #include <iostream>
  3. #include <string>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. using namespace std;

  7. //存放查询数据的结构体
  8. struct result
  9. {
  10.     char ename[20];
  11.     char cname[20];
  12.     result()
  13.     {
  14.         memset(ename, '\0', sizeof(ename));
  15.         memset(cname, '\0', sizeof(cname));
  16.     }
  17. };

  18. int main()
  19. {
  20.     // 初始化 OCI 环境句柄指针
  21.     OCIEnv *envhpp = NULL;
  22.     // 初始化服务器句柄
  23.     OCIServer *servhpp = NULL;
  24.     // 用于捕获 OCI 错误信息
  25.     OCIError *errhpp = NULL;
  26.     // 初始化会话句柄
  27.     OCISession *usrhpp = NULL;
  28.     // 初始化服务上下文句柄
  29.     OCISvcCtx *svchpp = NULL;
  30.     // 初始化表达式句柄
  31.     OCIStmt *stmthpp = NULL;

  32.     string server="mydb";

  33.     // 创建 OCI 环境 , 并设置环境句柄。
  34.     sword swResult = OCIEnvCreate(&envhpp, OCI_DEFAULT, NULL, NULL, NULL, NULL, 0, NULL);
  35.     if (swResult != OCI_SUCCESS && swResult != OCI_SUCCESS_WITH_INFO)
  36.     {
  37.         cout << "Oracle environment initialization error!" << endl;
  38.         exit(1);
  39.     }
  40.     cout << "Oracle environment initialization success!" << endl;

  41.     // 创建错误句柄
  42.     OCIHandleAlloc((dvoid *)envhpp, (dvoid **)&errhpp, OCI_HTYPE_ERROR, (size_t)0, (dvoid **)0);

  43.     // 创建服务句柄
  44.     OCIHandleAlloc((dvoid *)envhpp, (dvoid **)&servhpp, OCI_HTYPE_SERVER, (size_t)0, (dvoid **)0);

  45.     // 连接服务器,如果失败则获取错误码
  46.     if (OCIServerAttach(servhpp, errhpp,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值