库使用C语言连接Oracle数据库的实践(c 连接oracle类)
库使用C语言连接Oracle数据库的实践
随着IT技术的飞速发展,大量的数据处理和存储需要依靠数据库。而Oracle数据库作为业内著名的数据库软件,其稳定性和可靠性备受认可。在C语言开发过程中,连接Oracle数据库也是一个重要的任务。本文将介绍使用库连接Oracle数据库的实践,并提供相关代码供大家参考。
第一步:安装Oracle客户端
在使用C语言连接Oracle数据库之前,需要先安装Oracle客户端。需要注意的是,安装的Oracle客户端版本必须与Oracle数据库版本匹配,否则无法进行连接。
第二步:包含头文件和库文件
在C语言代码中,需要包含Oracle客户端的头文件和库文件,以便进行数据库连接操作。头文件有oracle.h和oci.h两个,而库文件有libocci.a和libclntsh.a两个。
“`c
#include
#include
#include
#include
#pragma comment(lib, “libocci.a”)
#pragma comment(lib, “libclntsh.a”)
#define USERNAME “username” //数据库用户名
#define PASSWORD “password” //数据库密码
#define CONNSTR “connstr” //数据库连接字符串
第三步:连接数据库
在使用C语言连接Oracle数据库之前,需要声明OCI_API函数指针,并初始化OCI环境。然后,使用OCI函数oci_initialize()初始化OCI环境。
```ctypedef sword (API *OCISERVERVERSION)(ovoid *hndlp, OCIError *errhp, OraText *bufp, ub4 bufsz, ub1 hndltype, ub4 *version); //oci函数指针
OCIEnv *envhp; //OCI环境指针OCIServer *srvhp; //OCI服务器指针
OCIError *errhp; //OCI错误句柄指针OCISession *seshp; //OCI会话句柄指针
OCISvcCtx *svchp; //OCI服务上下文指针OCIServerVersion server_version; //OCI服务器版本信息
OCISERVERVERSION pfnOCIServerVersion; //OCI函数指针变量ub4 version;
if(OCIEnvCreate(&envhp, OCI_THREADED, NULL, NULL, NULL, NULL, 0, NULL) != OCI_SUCCESS) //初始化OCI环境{
printf("OCIEnvCreate error.\n"); return -1;
}
if(OCIHandleAlloc((dvoid *)envhp, (dvoid **)&errhp, OCI_HTYPE_ERROR, 0, NULL) != OCI_SUCCESS) //分配OCI错误句柄内存{
printf("OCIHandleAlloc OCI_HTYPE_ERROR error."); OCIHandleFree((dvoid *)&envhp, OCI_HTYPE_ENV);
return -1;}
if(OCIHandleAlloc((dvoid *)envhp, (dvoid **)&srvhp, OCI_HTYPE_SERVER, 0, NULL) != OCI_SUCCESS) //分配OCI服务器指针内存{
printf("OCIHandleAlloc OCI_HTYPE_SERVER error."); OCIHandleFree((dvoid *)&envhp, OCI_HTYPE_ENV);
return -1;}
pfnOCIServerVersion = (OCISERVERVERSION) OCIExtProcGetProc((dvoid *)srvhp, (const OraText *)"OCIServerVersion");if(pfnOCIServerVersion != NULL)
{ memset(server_version.version_string, 0, sizeof(server_version.version_string));
pfnOCIServerVersion(srvhp, errhp, server_version.version_string, sizeof(server_version.version_string), OCI_HTYPE_SERVER, &version); server_version.version_length = strlen(server_version.version_string);
printf("Oracle DB version : %s", server_version.version_string); //打印Oracle数据库版本}
if(OCILogon2(envhp, errhp, &svchp, (OraText *)USERNAME, strlen(USERNAME), (OraText *)PASSWORD, strlen(PASSWORD), (OraText *)CONNSTR, strlen(CONNSTR), OCI_DEFAULT) != OCI_SUCCESS) //连接Oracle数据库{
printf("登录数据库失败.\n"); return -1;
}printf("连接Oracle数据库成功.\n");
第四步:使用SQL语句操作数据库
在连接Oracle数据库之后,可以使用OCI函数来执行SQL语句,例如执行查询语句:
“`c
OCIStmt *pstmthp; //OCI语句句柄指针
text *sqlstmt = (text *)”SELECT * FROM TABLENAME”; //SQL语句
if(OCIHandleAlloc((dvoid *)envhp, (dvoid **)&pstmthp, OCI_HTYPE_STMT, 0, NULL) != OCI_SUCCESS) //分配OCI语句句柄内存
{
printf(“OCIHandleAlloc OCI_HTYPE_STMT error.\n”);
OCIHandleFree((dvoid *)&srvhp, OCI_HTYPE_SERVER);
OCIHandleFree((dvoid *)&errhp, OCI_HTYPE_ERROR);
OCIHandleFree((dvoid *)&envhp, OCI_HTYPE_ENV);
return -1;
}
if(OCIStmtPrepare(pstmthp, errhp, sqlstmt, strlen((char *)sqlstmt), OCI_NTV_SYNTAX, OCI_DEFAULT) != OCI_SUCCESS) //准备执行SQL语句
{
printf(“OCIStmtPrepare error.\n”);
OCIHandleFree((dvoid *)&pstmthp, OCI_HTYPE_STMT);
OCIHandleFree((dvoid *)&srvhp, OCI_HTYPE_SERVER);
OCIHandleFree((dvoid *)&errhp, OCI_HTYPE_ERROR);
OCIHandleFree((dvoid *)&envhp, OCI_HTYPE_ENV);
return -1;
}
if(OCIStmtExecute(svchp, pstmthp, errhp, 0, 0, NULL, NULL, OCI_DEFAULT) != OCI_SUCCESS) //执行SQL语句
{
printf(“OCIStmtExecute error.\n”);
OCIHandleFree((dvoid *)&pstmthp, OCI_HTYPE_STMT);
OCIHandleFree((dvoid *)&srvhp, OCI_HTYPE_SERVER);
OCIHandleFree((dvoid *)&errhp, OCI_HTYPE_ERROR);
OCIHandleFree((dvoid *)&envhp, OCI_HTYPE_ENV);
return -1;
}
第五步:关闭数据库连接
使用完数据库后,需要关闭数据库连接,以释放资源。
```cif(OCILogoff(svchp, errhp) != OCI_SUCCESS) //关闭数据库连接
{ printf("关闭数据库连接失败.\n");
OCIHandleFree((dvoid *)&pstmthp, OCI_HTYPE_STMT); OCIHandleFree((dvoid *)&svchp, OCI_HTYPE_SVCCTX);
OCIHandleFree((dvoid *)&srvhp, OCI_HTYPE_SERVER); OCIHandleFree((dvoid *)&errhp, OCI_HTYPE_ERROR);
OCIHandleFree((dvoid *)&envhp, OCI_HTYPE_ENV); return -1;
}printf("关闭数据库连接成功.\n");
OCIHandleFree((dvoid *)&pstmthp, OCI_HTYPE_STMT);OCIHandleFree((dvoid *)&svchp, OCI_HTYPE_SVCCTX);
OCIHandleFree((dvoid *)&srvhp, OCI_HTYPE_SERVER);OCIHandleFree((dvoid *)&errhp, OCI_HTYPE_ERROR);
OCIHandleFree((dvoid *)&envhp, OCI_HTYPE_ENV);
以上就是使用C语言连接Oracle数据库的实践和代码演示。使用OCI API,可以方便地连接和操作Oracle数据库,为C语言开发者提供了更好的数据处理和存储支持。