如何利用C语言操作Oracle数据库(c oracle查询数据)

如何利用C语言操作Oracle数据库

Oracle是一款商业性质的数据库管理系统。它拥有完备的数据管理和安全方案,可以管理海量的数据,是企业级数据库市场的一把强大的利器。许多公司都使用Oracle来保障大数据的管理安全性和可扩展性。本文将探讨如何使用C语言来操作Oracle数据库,并提供相应的代码实现。

前置条件

在开始学习如何利用C语言操作Oracle数据库之前,需要保证以下环境已经配置好:

1.Oracle客户端,包括Oracle的头文件和库文件

2.Oracle数据库的连接信息,如IP地址、用户名、密码等

如果您还没有安装Oracle客户端,请先到Oracle的官方网站下载客户端并配置环境变量。

连接Oracle数据库

连接Oracle数据库是使用C语言操作Oracle数据库的第一步。下面的代码展示了如何使用OCI库连接Oracle数据库。

#include 
#include
#include
int mn()
{
OCIEnv* envhp = NULL;
OCIError* errhp = NULL;
OCISvrCtx* srvhp = NULL;
OCISession* sesnhp = NULL;
sword status;

/* 初始化Oracle环境 */
status = OCIEnvCreate(&envhp, OCI_THREADED | OCI_OBJECT, (void*)0,
0, 0, 0, (size_t)0, (void**)0);
if (status != OCI_SUCCESS) {
printf("OCIEnvCreate error\n");
exit(1);
}

/* 创建Oracle错误句柄 */
status = OCIHandleAlloc((dvoid*)envhp, (dvoid**)&errhp, OCI_HTYPE_ERROR,
(size_t)0, (void**)0);
if (status != OCI_SUCCESS) {
printf("OCIHandleAlloc error\n");
exit(1);
}

/* 创建Oracle服务器上下文 */
status = OCIHandleAlloc((dvoid*)envhp, (dvoid**)&srvhp, OCI_HTYPE_SERVER,
(size_t)0, (void**)0);
if (status != OCI_SUCCESS) {
printf("OCIHandleAlloc error\n");
exit(1);
}

/* 创建Oracle用户登录会话 */
status = OCIHandleAlloc((dvoid*)envhp, (dvoid**)&sesnhp, OCI_HTYPE_SESSION,
(size_t)0, (void**)0);
if (status != OCI_SUCCESS) {
printf("OCIHandleAlloc error\n");
exit(1);
}

/* 连接Oracle数据库 */
status = OCIServerAttach(srvhp, errhp, (const OraText*)"127.0.0.1:1521/ORCL", -1, OCI_DEFAULT);
if (status != OCI_SUCCESS) {
printf("OCIServerAttach error\n");
exit(1);
}
/* 设置Oracle服务器上下文 */
status = OCIAttrSet((dvoid*)sesnhp, OCI_HTYPE_SESSION, (dvoid*)srvhp, (ub4)0,
OCI_ATTR_SERVER, errhp);
if (status != OCI_SUCCESS) {
printf("OCIAttrSet error\n");
exit(1);
}

/* 设置Oracle用户登录信息 */
status = OCIAttrSet((dvoid*)sesnhp, OCI_HTYPE_SESSION, (dvoid*)"system", (ub4)strlen("system"),
OCI_ATTR_USERNAME, errhp);
if (status != OCI_SUCCESS) {
printf("OCIAttrSet error\n");
exit(1);
}

status = OCIAttrSet((dvoid*)sesnhp, OCI_HTYPE_SESSION, (dvoid*)"123456", (ub4)strlen("123456"),
OCI_ATTR_PASSWORD, errhp);
if (status != OCI_SUCCESS) {
printf("OCIAttrSet error\n");
exit(1);
}
/* 创建Oracle事务句柄 */
OCITrans* transhp = NULL;
status = OCIHandleAlloc((dvoid*)envhp, (dvoid**)&transhp, OCI_HTYPE_TRANS, 0, 0);
if (status != OCI_SUCCESS) {
printf("OCIHandleAlloc error\n");
exit(1);
}

/* 开始Oracle用户会话 */
status = OCISessionBegin(srvhp, errhp, sesnhp, OCI_CRED_RDBMS, OCI_DEFAULT);
if (status != OCI_SUCCESS) {
printf("OCISessionBegin error\n");
exit(1);
}
/* 设置Oracle事务上下文 */
status = OCIAttrSet((dvoid*)sesnhp, OCI_HTYPE_SESSION, transhp, 0, OCI_ATTR_TRANS, errhp);
if (status != OCI_SUCCESS) {
printf("OCIAttrSet error\n");
exit(1);
}

/* 此时你已经连接成功了Oracle数据库 */
printf("connect Oracle succeed!\n");

/* 释放Oracle会话 */
status = OCIHandleFree(sesnhp, OCI_HTYPE_SESSION);
if (status != OCI_SUCCESS) {
printf("OCIHandleFree error\n");
exit(1);
}
/* 释放Oracle事务上下文 */
status = OCIHandleFree(transhp, OCI_HTYPE_TRANS);
if (status != OCI_SUCCESS) {
printf("OCIHandleFree error\n");
exit(1);
}
/* 断开Oracle服务器 */
OCIServerDetach(srvhp, errhp, OCI_DEFAULT);
/* 释放Oracle错误句柄 */
OCIHandleFree(errhp, OCI_HTYPE_ERROR);
/* 释放Oracle服务器上下文 */
OCIHandleFree(srvhp, OCI_HTYPE_SERVER);
/* 释放Oracle环境 */
OCIHandleFree(envhp, OCI_HTYPE_ENV);
return 0;
}

以上示例代码完成了Oracle数据库的连接,以下将对代码进行解释说明。

OCIEnvCreate函数,用于新建Oracle的环境句柄envhp。

OCIHandleAlloc函数,用于新建Oracle的错误句柄errhp、服务器上下文句柄srvhp、会话句柄sesnhp、事务句柄transhp。

OCIServerAttach函数,连接到Oracle服务器。

OCIAttrSet函数,设置Oracle连接的属性值,如服务器上下文、用户名、密码、事务上下文。

OCISessionBegin函数,开始Oracle用户会话。

OCIHandleFree函数,释放句柄。

其中 127.0.0.1 为你的 Oracle 数据库的地址,1521为其端口号(默认端口号),ORCL为数据库的实例名,system是默认用户名,123456则为密码。

执行以上代码,可以得到以下输出。

connect Oracle succeed!

即连接成功。

查询数据

在连接 Oracle 数据库后,我们可以用 C 语言编写查询语句来获取想要的数据。

以下是查询数据库的 C 语言示例代码。

#include 
#include
#include
int mn()
{
OCIEnv* envhp = NULL;
OCIError* errhp = NULL;
OCIServer* srvhp = NULL;
OCISession* sesnhp = NULL;
sword status;

/* 初始化Oracle环境 */
status = OCIEnvCreate(&envhp, OCI_THREADED | OCI_OBJECT, (void*)0,
0, 0, 0, (size_t)0, (void**)0);
if (status != OCI_SUCCESS) {
printf("OCIEnvCreate error\n");
exit(1);
}

/* 创建Oracle错误句柄 */
status = OCIHandleAlloc((dvoid*)envhp, (dvoid**)&errhp, OCI_HTYPE_ERROR,
(size_t)0, (void**)0);
if (status != OCI_SUCCESS) {
printf("OCIHandleAlloc error\n");
exit(1);
}

/* 创建Oracle服务器上下文 */
status = OCIHandleAlloc((dvoid*)envhp, (dvoid**)&srvhp, OCI_HTYPE_SERVER,
(size_t)0, (void**)0);
if (status != OCI_SUCCESS) {
printf("OCIHandleAlloc error\n");
exit(1);
}

/* 创建Oracle用户登录会话 */
status = OCIHandleAlloc((dvoid*)envhp, (dvoid**)&sesnhp, OCI_HTYPE_SESSION,
(size_t)0, (void**)0);
if (status != OCI_SUCCESS) {
printf("OCIHandleAlloc error\n");
exit(1);
}

/* 连接Oracle数据库 */
status = OCIServerAttach(srvhp, errhp, (const OraText*)"127.0.0.1:1521/ORCL", -1, OCI_DEFAULT);
if (status != OCI_SUCCESS) {
printf("OCIServerAttach error\n");
exit(1);
}
/* 设置Oracle服务器上下文 */
status = OCI

数据运维技术 » 如何利用C语言操作Oracle数据库(c oracle查询数据)