oci函数的基本使用
ORACLE调用接口(Oracle Call Interface简称OCI)提供了一组可对ORACLE数据库进行存取的接口子例程(函数),通过在第三代程序设计语言(如C语言)中进行调用可达到存取ORACLE数据库的目的。
#引入库: #include <oci.h> #定义变量: OCIEnv *envhp; //环境句柄 OCIError *errhp; //错误句柄 OCIServer *srvhp; //服务器句柄 OCISvcCtx *svchp; //服务环境句柄 OCIStmt *stmthp; //语句句柄 #C++调用oci连接数据库步骤: OCIEnvCreate():创建环境句柄,使用方式如下: OCIEnvCreate(&envhp,OCI_DEFAULT,(dvoid*)0,NULL,NULL,NULL,0,(dvoid**)0); OCIHandleAlloc():根据环境句柄分配相关句柄资源: OCIHandleAlloc((dvoid*)envhp,(dvoid**)&errhp,OCI_HTYPE_ERROR,(size_t)0,(dvoid**)0); //分配错误句柄 OCIHandleAlloc((dvoid*)envhp,(dvoid**)&srvhp,OCI_HTYPE_SERVER,(size_t)0,(dvoid**)0); //分配服务器句柄 OCIHandleAlloc((dvoid*)envhp,(dvoid**)&svchp,OCI_HTYPE_SVCCTX,(size_t)0,(dvoid**)0); //分配服务句柄 OCIHandleAlloc((dvoid*)envhp,(dvoid**)&stmthp,OCI_HTYPE_STMT,(size_t)0,(dvoid**)0); //分配执行语句句柄 OCIAttrSet((dvoid*)svchp,OCI_HTYPE_SVCCTX,(dvoid*)srvhp,(ub4)0,OCI_ATTR_SERVER,(OCIError*)errhp); //设置服务使用的服务器句柄属性。 OCILogon():连接数据库,使用如下: OCILogon(envhp,errhp,&svchp,(OraText*)username,(ub4)strlen(username),(OraText*)pwd,(ub4)strlen(pwd),(OraText*)db,(ub4)strlen(db)) 如果返回OCI_SUCCESS则说明连接数据库成功,否则失败,根据失败原因查找问题。 释放oci连接步骤: 如果数据库已连接,调用函数:OCILogoff(svchp,errhp),如果成功,则调用函数:OCIHandleFree((dvoid*)envhp,OCI_HTYPE_ENV)释放环境资源句柄。 C++调用oci插入、删除、修改数据库方法: OCIStmtPrepare():准备执行语句,使用方式如下: OCIStmtPrepare(stmthp,errhp,(text*)(unsigned char*)p_str,(ub4)strlen(p_str),OCI_NTV_SYNTAX,OCI_DEFAULT); //准备sql语句,将sql语句绑定到stmthp语句句柄 OCIStmtExecute():执行sql语句,使用方式如下: OCIStmtExecute( svchp, stmthp, errhp, (ub4) 1, (ub4) 0, (OCISnapshot *) NULL,(OCISnapshot *) NULL, (ub4) OCI_DEFAULT); //执行sql语句 OCITransCommit():提交事务,使用方式如下: OCITransCommit(svchp,errhp,0); //提交事务。 C++调用oci查询数据库方法: OCIStmtPrepare():准备执行语句,使用方式如下: OCIStmtPrepare(stmthp,errhp,(text*)(unsigned char*)p_str,(ub4)strlen(p_str),OCI_NTV_SYNTAX,OCI_DEFAULT); //准备sql语句,将sql语句绑定到stmthp语句句柄 OCIDefineByPos():根据数据位置,定义数据格式,使用方式如下: OCIDefineByPos(stmthp, &defnp1, errhp, 1, (dvoid*) &res, (sword) sizeof(res), SQLT_CHR, (dvoid *) 0, (ub2 *) 0, (ub2 *) 0, OCI_DEFAULT); //绑定数据格式 OCIStmtExecute():执行sql语句,使用方式如下: OCIStmtExecute( svchp, stmthp, errhp, (ub4) 1, (ub4) 0, (OCISnapshot *) NULL,(OCISnapshot *) NULL, (ub4) OCI_DEFAULT); //执行sql语句 OCIStmtFetch():遍历结果集合,使用方式如下: OCIStmtFetch(stmthp, errhp, (ub4) 1, OCI_FETCH_NEXT, 1);
相关代码见:
(待上传)
文章来源: c++ oci函数的基本使用