一. 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编程:
- #include <oci.h>
- #include <iostream>
- #include <string>
- #include <string.h>
- #include <stdlib.h>
- using namespace std;
- //存放查询数据的结构体
- struct result
- {
- char ename[20];
- char cname[20];
- result()
- {
- memset(ename, '\0', sizeof(ename));
- memset(cname, '\0', sizeof(cname));
- }
- };
- int main()
- {
- // 初始化 OCI 环境句柄指针
- OCIEnv *envhpp = NULL;
- // 初始化服务器句柄
- OCIServer *servhpp = NULL;
- // 用于捕获 OCI 错误信息
- OCIError *errhpp = NULL;
- // 初始化会话句柄
- OCISession *usrhpp = NULL;
- // 初始化服务上下文句柄
- OCISvcCtx *svchpp = NULL;
- // 初始化表达式句柄
- OCIStmt *stmthpp = NULL;
- string server="mydb";
- // 创建 OCI 环境 , 并设置环境句柄。
- sword swResult = OCIEnvCreate(&envhpp, OCI_DEFAULT, NULL, NULL, NULL, NULL, 0, NULL);
- if (swResult != OCI_SUCCESS && swResult != OCI_SUCCESS_WITH_INFO)
- {
- cout << "Oracle environment initialization error!" << endl;
- exit(1);
- }
- cout << "Oracle environment initialization success!" << endl;
- // 创建错误句柄
- OCIHandleAlloc((dvoid *)envhpp, (dvoid **)&errhpp, OCI_HTYPE_ERROR, (size_t)0, (dvoid **)0);
- // 创建服务句柄
- OCIHandleAlloc((dvoid *)envhpp, (dvoid **)&servhpp, OCI_HTYPE_SERVER, (size_t)0, (dvoid **)0);
- // 连接服务器,如果失败则获取错误码
- if (OCIServerAttach(servhpp, errhpp,