VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

使用OCI连接数据库

获取OCI连接

在使用OCIEnvCreate接口(或者OCIEnvInit,OCIInitialize)分配环境句柄,以及OCIHandleAlloc接口分配错误句柄后,获取OCI数据库连接用OCILogon接口。如果使用OCIInitilize接口创建环境,则需要搭配OCITerminate接口使用来结束程序。

OCIEnv       *envhp;  // 环境句柄   
OCIServer     *srvhp;  // 服务句柄   
OCIError      *errhp;	 // 错误句柄
OCISvcCtx     *svchp;  //服务上下文句柄
/* 1.分配环境和错误句柄 */
if(OCIEnvCreate((OCIEnv **) &envhp, (ub4) OCI_DEFAULT,
                  (dvoid *) 0, (dvoid * (*)(dvoid *,size_t)) 0,
                  (dvoid * (*)(dvoid *, dvoid *, size_t)) 0,
                  (void (*)(dvoid *, dvoid *)) 0, (size_t) 0, (dvoid **) 0))
{
printf("FAILED: OCIEnvCreate()\n");         
return OCI_ERROR;        
}
If(OCIHandleAlloc( (dvoid *) envhp, (dvoid **) &errhp, (ub4) OCI_HTYPE_ERROR,
           (size_t)0, (dvoid **) 0))
{
printf("FAILED: OCIHandleAlloc()\n");         
return OCI_ERROR;
}
 /* 2.建立连接并创建简单会话*/
if(OCILogon(envhp, errhp, &svchp, username, strlen (username),
               password, strlen (password), "", 0))
{
printf("FAILED: OCILogon()\n");         
return OCI_ERROR;
}

关闭OCI连接

关闭连接时调用OCILogoff()函数关闭数据库连接,程序结束前调用OCIHandleFree释放分配的句柄:

if(OCILogoff(svchp, errhp))
{
printf("FAILED: OCILogoff()\n");         
return OCI_ERROR;
}
if(svchp)
    OCIHandleFree((dvoid *)svchp, (ub4)OCI_HTYPE_SVCCTX);
if(errhp)
    OCIHandleFree((dvoid *)errhp, (ub4)OCI_HTYPE_ERROR);
if(envhp)
    OCIHandleFree((dvoid *)envhp, (ub4)OCI_HTYPE_ENV);