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) {