GOOD.docx
《GOOD.docx》由会员分享,可在线阅读,更多相关《GOOD.docx(20页珍藏版)》请在冰豆网上搜索。
![GOOD.docx](https://file1.bdocx.com/fileroot1/2022-10/28/2f12e69d-de1e-45db-8948-50bac215c7f4/2f12e69d-de1e-45db-8948-50bac215c7f41.gif)
GOOD
#include
typedef short int SWORD;
...others
/* SQL portable types for C */
typedef unsigned char UCHAR;
typedef signed char SCHAR;
typedef SCHAR SQLSCHAR;
typedef long int SDWORD;
typedef short int SWORD;
typedef unsigned long int UDWORD;
typedef unsigned short int UWORD;
#ifndef _WIN64
typedef UDWORD SQLUINTEGER;
#endif
typedef signed long SLONG;
typedef signed short SSHORT;
typedef unsigned long ULONG;
typedef unsigned short USHORT;
typedef double SDOUBLE;
一、OCI是什么?
OCI是一组底层的API(应用程序接口),主要和Oracle数据库进行交互。
你可以调用一些操作如logon,execute,parse,fecth等等。
OCI支持大数据语言,通常使用C/C++。
与OraclePro*C等不同,OCI不需要预编译。
OCI比Pro*C的一些优势:
OCI的性能十分出色
代码大量缩减
对内置函数直接访问
对LONG类型的分段操作(可以处理LONG相关的任何错误)
Pro*C不能为绑定变量动态分配内存
不能控制Pro*C自动生成的代码
OCI开发流程:
连接多个数据库:
使用OCILogon(olog,olonororlon)
打开游标:
oexec,oexn,ofen或者oftech
执行相应SQL语句
关于游标:
oclose
断开连接:
ologoff
二、各个函数介绍:
1.创建OCI环境
swordOCIEnvCreate(
OCIEnv**envhpp, //OCI环境句柄指针
ub4mode, //初始化模式:
OCI_DEFAULT/OCI_THREADED等
CONSTdvoid*ctxp,
CONSTdvoid*(*malicfp)(dvoid*ctxp,size_tsize),
CONSTdvoid*(ralocfp)(dvoid*ctxp,dvoid*memptr,size_tnewsize),
CONSTvoid*(*mfreefp)(dvoid*ctxp,dvoid*memptr),
Size_txstramemsz,
Dvoid**usrmempp
)
2.申请/释放句柄
swordOCIHandleAlloc(
CONSTdvoid*parenth, //新申请句柄的父句柄,一般为OCI环境句柄
Dvoid**hndlpp, //申请的新句柄
Ub4type,type, //句柄类型
Size_txtramem_sz, //申请的内存数
Dvoid**usrmempp //申请到的内存块指针
)
3.读取/设置句柄属性
swordOCIAttrSet(
dvoid*trgthndlp, //需设置的句柄名
ub4 trghndltyp, //句柄类型
dvoid*attributep, //设置的属性名
ub4size, //属性值长度
ub4attrtype, //属性类型
OCIError*errhp //错误句柄
)
4.连接/断开服务器
多用户方式连接:
sword OCIServerAttach(
OCIServer *srvhp,//未初始化的服务器句柄
OCIError *errhp,
CONSTtext *dblink,//服务器SID
sb4 dblink_len,
ub4 mode//=OCI_DEFAULT,系统环境将设为阻塞方式
);
swordOCIServerDetach(
OCIServer *srvhp,
OCIError *errhp,
ub4 mode//OCI_DEFAULT
);
单用户方式连接:
swordOCILogon(
OCIEnv *envhp,
OCIError *errhp,
OCISvcCtx **svchp,
CONSTtext *username,
ub4 uname_len,
CONSTtext *password,
ub4 passwd_len,
CONSTtext *dbname,
ub4 dbname_len
);
swordOCILogoff(
OCISvcCtx *svchp
OCIError *errhp
);
5.开始/结束一个会话
先认证用户再建立一个会话连接
swordOCISessionBegin(
OCISvcCtx *svchp, //服务环境句柄
OCIError *errhp,
OCISession *usrhp, //用户会话句柄
ub4 credt, //认证类型
ub4 mode //操作模式
);
6.读取错误信息
swordOCIErrorGet(
dvoid *hndlp, //错误句柄
ub4 recordno, /从那里读取错误记录,从1开始
text *sqlstate, //已取消,=NULL
sb4 *errcodep, //错误号
text *bufp, //错误内容
ub4 bufsiz, //bufp长度
ub4 type //传递的错误句柄类型
=OCI_HTYPE_ERROR:
错误句柄
=OCI_HTYPE_ENV:
环境句柄
);
7.准备SQL语句
swordOCIStmtPrepare(
OCIStmt *stmtp, //语句句柄
OCIError *errhp,
CONSTtext *stmt, //SQL语句
ub4 stmt_len, //语句长度
ub4 language, //语句的语法格式=OCI_NTV_SYNTAX
ub4 mode //=OCI_DEFAULT
);
8.绑定输入参数
swordOCIBindByName(
OCIStmt *stmtp,//语句句柄
OCIBind **bindpp,//结合句柄,=NULL
OCIError *errhp,
CONSTtext *placeholder,//占位符名称
sb4 placeh_len,//占位符长度
dvoid *valuep,//绑定的变量名
sb4 value_sz,//绑定的变量名长度
ub2 dty, //绑定的类型
dvoid *indp,//指示符变量指针(sb2类型),单条绑定时为NULL,
ub2 *alenp,//说明执行前后被结合的数组变量中各元素数据实际的长度,单条绑定时为NULL
ub2 *rcodep,//列级返回码数据指针,单条绑定时为NULL
ub4 maxarr_len,//最多的记录数,如果是单条绑定,则为0
ub4 *curelep,//实际的记录数,单条绑定则为NULL
ub4 mode//=OCI_DEFAULT
);
swordOCIBindByPos(OCIStmt *stmtp,
OCIBind **bindpp,
OCIError *errhp,
ub4 position,//绑定的位置
dvoid *valuep,
sb4 value_sz,
ub2 dty,
dvoid *indp,
ub2 *alenp,
ub2 *rcodep,
ub4 maxarr_len,
ub4 *curelep,
ub4 mode
);
9.执行SQL语句
swordOCIStmtExecute(
OCISvcCtx *svchp, //服务环境句柄
OCIStmt *stmtp, //语句句柄
OCIError *errhp,
ub4 iters,//**
ub4