C语言实现Oracle数据库增删改查操作(c oracle增删改查)

C语言实现Oracle数据库增删改查操作

Oracle数据库是一款功能强大的关系型数据库管理系统。在实际开发中,我们经常需要通过编程语言来实现与Oracle数据库的交互。本文将介绍如何使用C语言来实现Oracle数据库的增删改查操作。

一、安装Oracle OCI客户端

在使用C语言连接Oracle数据库之前,需要先安装Oracle OCI客户端。OCI(Oracle Call Interface)是Oracle提供的一套用于C语言与Oracle数据库交互的API接口。OCI包含了大量的库函数和常量,使得程序员可以通过C语言轻松地访问Oracle数据库。

Oracle OCI客户端可从Oracle官网的下载页面下载。安装过程中需要注意选择对应的系统位数和版本。将安装目录下的include、lib和bin目录添加到系统环境变量中,以便于C语言程序调用OCI库函数。

二、连接Oracle数据库

连接Oracle数据库是使用C语言操作Oracle数据库的第一步。连接Oracle数据库需要使用OCI提供的库函数,首先需要创建一个OCI环境句柄和一个OCI错误句柄。

“` c

#include

#include

OCIEnv *envhp; // OCI环境句柄

OCIError *errhp; // OCI错误句柄

int mn()

{

// 创建OCI环境句柄

if (OCIEnvCreate(&envhp, OCI_DEFAULT, 0, 0, 0, 0, 0, 0) != OCI_SUCCESS) {

printf(“OCIEnvCreate error\n”);

return -1;

}

// 创建OCI错误句柄

if (OCIHandleAlloc(envhp, (dvoid**)&errhp, OCI_HTYPE_ERROR, 0, 0) != OCI_SUCCESS) {

printf(“OCIHandleAlloc error\n”);

return -1;

}

// 连接Oracle数据库

OCISvcCtx *svchp; // 服务上下文句柄

OCISession *seshp; // 会话句柄

OCIStmt *stmthp; // SQL语句句柄

if (OCILogon(envhp, errhp, &svchp, “用户名”, strlen(“用户名”), “密码”, strlen(“密码”), “数据库名”, strlen(“数据库名”)) != OCI_SUCCESS) {

OCIErrorGet(errhp, 1, NULL, NULL, NULL, 0, OCI_HTYPE_ERROR);

printf(“OCILogon error\n”);

return -1;

}

printf(“Connect to Oracle database successfully!\n”);

// 关闭OCI环境句柄、OCI错误句柄、服务上下文句柄和会话句柄

OCIHandleFree(svchp, OCI_HTYPE_SVCCTX);

OCIHandleFree(seshp, OCI_HTYPE_SESSION);

OCIHandleFree(stmthp, OCI_HTYPE_STMT);

OCIHandleFree(errhp, OCI_HTYPE_ERROR);

OCIHandleFree(envhp, OCI_HTYPE_ENV);

return 0;

}


以上代码中,通过OCIEnvCreate库函数创建OCI环境句柄,通过OCIHandleAlloc库函数创建OCI错误句柄。接着使用OCILogon库函数连接Oracle数据库,连接成功后输出提示信息。最后使用OCIHandleFree库函数释放OCI环境句柄、OCI错误句柄、服务上下文句柄和会话句柄。

三、执行SQL语句

连接Oracle数据库成功后,我们就可以执行SQL语句了。SQL语句需要使用OCIStmt句柄来执行。我们可以使用OCIStmtPrepare函数来预编译SQL语句,并使用OCIStmtExecute函数来执行SQL语句。

``` c
#include
#include
OCIEnv *envhp; // OCI环境句柄
OCIError *errhp; // OCI错误句柄
int mn()
{
// 创建OCI环境句柄
if (OCIEnvCreate(&envhp, OCI_DEFAULT, 0, 0, 0, 0, 0, 0) != OCI_SUCCESS) {
printf("OCIEnvCreate error\n");
return -1;
}
// 创建OCI错误句柄
if (OCIHandleAlloc(envhp, (dvoid**)&errhp, OCI_HTYPE_ERROR, 0, 0) != OCI_SUCCESS) {
printf("OCIHandleAlloc error\n");
return -1;
}
// 连接Oracle数据库
OCISvcCtx *svchp; // 服务上下文句柄
OCISession *seshp; // 会话句柄
OCIStmt *stmthp; // SQL语句句柄
if (OCILogon(envhp, errhp, &svchp, "用户名", strlen("用户名"), "密码", strlen("密码"), "数据库名", strlen("数据库名")) != OCI_SUCCESS) {
OCIErrorGet(errhp, 1, NULL, NULL, NULL, 0, OCI_HTYPE_ERROR);
printf("OCILogon error\n");
return -1;
}
// 执行SQL语句
const char *sql = "SELECT * FROM tablename";
if (OCIStmtPrepare(stmthp, errhp, sql, strlen(sql), OCI_NTV_SYNTAX, OCI_DEFAULT) != OCI_SUCCESS) {
OCIErrorGet(errhp, 1, NULL, NULL, NULL, 0, OCI_HTYPE_ERROR);
printf("OCIStmtPrepare error\n");
return -1;
}
if (OCIStmtExecute(svchp, stmthp, errhp, 1, 0, NULL, NULL, OCI_DEFAULT) != OCI_SUCCESS) {
OCIErrorGet(errhp, 1, NULL, NULL, NULL, 0, OCI_HTYPE_ERROR);
printf("OCIStmtExecute error\n");
return -1;
}
printf("Execute SQL successfully!\n");
// 关闭OCI环境句柄、OCI错误句柄、服务上下文句柄和会话句柄
OCIHandleFree(svchp, OCI_HTYPE_SVCCTX);
OCIHandleFree(seshp, OCI_HTYPE_SESSION);
OCIHandleFree(stmthp, OCI_HTYPE_STMT);
OCIHandleFree(errhp, OCI_HTYPE_ERROR);
OCIHandleFree(envhp, OCI_HTYPE_ENV);
return 0;
}

以上代码中,使用OCIStmtPrepare库函数预编译SQL语句,并使用OCIStmtExecute函数执行SQL语句。执行成功后输出提示信息。

四、对数据库进行增删改操作

对于Oracle数据库的增、删、改操作,我们需要使用不同的SQL语句。例如,对于增操作,我们可以使用INSERT语句。对于删操作,我们可以使用DELETE语句。对于改操作,我们可以使用UPDATE语句。

以下是一个使用C语言实现Oracle数据库插入操作的代码示例:

“` c

#include

#include

OCIEnv *envhp; // OCI环境句柄

OCIError *errhp; // OCI错误句柄

int mn()

{

// 创建OCI环境句柄

if (OCIEnvCreate(&envhp, OCI_DEFAULT, 0, 0, 0, 0, 0, 0) != OCI_SUCCESS) {

printf(“OCIEnvCreate error\n”);

return -1;

}

// 创建OCI错误句柄

if (OCIHandleAlloc(envhp, (dvoid**)&errhp, OCI_HTYPE_ERROR, 0, 0) != OCI_SUCCESS) {

printf(“OCIHandleAlloc error\n”);

return -1;

}

// 连接Oracle数据库

OCISvcCtx *svchp; // 服务上下文句柄

OCISession *seshp; // 会话句柄

OCIStmt *stmthp; // SQL语句句柄

if (OCILogon(envhp, errhp, &svchp, “用户名”, strlen(“用户名”), “密码”, strlen(“密码”), “数据库名”, strlen(“数据库名”)) != OCI_SUCCESS) {

OCIErrorGet(errhp, 1, NULL, NULL, NULL, 0, OCI_HTYPE_ERROR);

printf(“OCILogon error\n”);

return -1;

}

// 执行SQL语句

const char *sql = “INSERT INTO tablename(col1, col2) VALUES(?, ?)”;

if (OCIStmtPrepare(stmthp, errhp, sql, strlen(sql), OCI_NTV_SYNTAX, OCI_DEFAULT) != OCI_SUCCESS) {


数据运维技术 » C语言实现Oracle数据库增删改查操作(c oracle增删改查)