C语言实现数据插入Oracle数据库(c 数据插入oracle)

C语言实现数据插入Oracle数据库

Oracle是一种流行的关系型数据库管理系统,支持多用户、高可靠性和数据完整性。而C语言是一种强大的系统级编程语言,常被用于开发操作系统和系统软件。本文将介绍如何使用C语言实现数据插入Oracle数据库的功能。

1. 安装Oracle数据库和OCI库

在开始编写代码前,需要安装Oracle数据库和OCI库。OCI库是Oracle提供的C语言库,用于在C程序中访问Oracle数据库。安装Oracle数据库和OCI库的步骤可参考Oracle官方文档。

2. 创建数据库连接

在C程序中,需要先创建一个数据库连接,才能对数据库进行操作。下面是一个用于连接Oracle数据库的示例代码:

“`c

#include

#include

int mn() {

OCIEnv* envhp;

OCIError* errhp;

OCIServer* srvhp;

OCISvcCtx* svchp;

OCISession* sesionhp;

sword status;

// 初始化OCI环境

OCIEnvCreate(&envhp, OCI_DEFAULT, (void*) 0, (void* (*)(void*, size_t)) 0,

(void* (*)(void*, void*, size_t)) 0, (void (*)(void*, void*)) 0, 0,

(void**) 0);

// 分配错误句柄

OCIHandleAlloc((void*) envhp, (void**) &errhp, OCI_HTYPE_ERROR, 0, (void**) 0);

// 分配服务器句柄

OCIHandleAlloc((void*) envhp, (void**) &srvhp, OCI_HTYPE_SERVER, 0, (void**) 0);

// 创建服务器上下文

status = OCIServerAttach(srvhp, errhp, (text*) “localhost:1521/ORCL”, strlen(“localhost:1521/ORCL”), OCI_DEFAULT);

// 分配服务上下文句柄

OCIHandleAlloc((void*) envhp, (void**) &svchp, OCI_HTYPE_SVCCTX, 0, (void**) 0);

// 设置服务上下文服务器句柄

OCIAttrSet((void*) svchp, OCI_HTYPE_SVCCTX, (void*) srvhp, 0, OCI_ATTR_SERVER, errhp);

// 分配会话句柄

OCIHandleAlloc((void*) envhp, (void**) &sessionhp, OCI_HTYPE_SESSION, 0, (void**) 0);

// 设置会话上下文服务器和服务上下文

OCIAttrSet((void*) sessionhp, OCI_HTYPE_SESSION, (void*) svchp, 0, OCI_ATTR_SVCCTX, errhp);

// 确定用户名和密码,然后开始会话

OCIAttrSet((void*) sessionhp, OCI_HTYPE_SESSION, (void*) “username”, strlen(“username”), OCI_ATTR_USERNAME, errhp);

OCIAttrSet((void*) sessionhp, OCI_HTYPE_SESSION, (void*) “password”, strlen(“password”), OCI_ATTR_PASSWORD, errhp);

OCIHandleAlloc((void*) envhp, (void**) &sessionhp, OCI_HTYPE_SESSION, 0, (void**) 0);

OCISessionBegin(svchp, errhp, sessionhp, OCI_CRED_RDBMS, OCI_DEFAULT);

OCIAttrSet((void*) svchp, OCI_HTYPE_SVCCTX, (void*) sessionhp, 0, OCI_ATTR_SESSION, errhp);

// … 以下省略其他代码 …

return 0;

}


上述代码中,首先通过OCIEnvCreate函数来初始化OCI环境。然后使用OCIHandleAlloc函数分别分配错误句柄、服务器句柄、服务上下文句柄和会话句柄。接着通过OCIServerAttach函数连接到Oracle数据库。然后再使用OCIAttrSet函数设置服务上下文服务器句柄、会话上下文服务器和服务上下文,最终通过OCISessionBegin函数开始会话。

3. 插入数据

创建数据库连接后,就可以向Oracle数据库中插入数据了。下面是一个用于向Oracle数据库中插入数据的示例代码:

```c
#include
#include
int mn() {
OCIEnv* envhp;
OCIError* errhp;
OCIServer* srvhp;
OCISvcCtx* svchp;
OCISession* sesionhp;
sword status;

// ... 以上省略初始化OCI环境和创建数据库连接的代码 ...

// 分配语句句柄
OCIStmt* stmthp;
OCIHandleAlloc((void*) envhp, (void**) &stmthp, OCI_HTYPE_STMT, 0, (void**) 0);
// 准备插入语句
char* sql = "INSERT INTO TABLE_NAME (COLUMN1, COLUMN2, COLUMN3) VALUES (:1, :2, :3)";
OCIStmtPrepare(stmthp, errhp, (text*) sql, strlen(sql), OCI_NTV_SYNTAX, OCI_DEFAULT);
// 绑定参数
int id = 1;
char* name = "张三";
int age = 25;
OCIParam* paramhp;
OCIStmtGetPieceInfo(stmthp, errhp, &paramhp, NULL, OCI_PARAM_INOUT, OCI_DEFAULT);
OCIDefineByPos(stmthp, &paramhp, errhp, 1, (void*) &id, sizeof(int), SQLT_INT, NULL, NULL, NULL, OCI_DEFAULT);
OCIStmtGetPieceInfo(stmthp, errhp, &paramhp, NULL, OCI_PARAM_INOUT, OCI_DEFAULT);
OCIDefineByPos(stmthp, &paramhp, errhp, 2, (void*) name, strlen(name), SQLT_STR, NULL, NULL, NULL, OCI_DEFAULT);
OCIStmtGetPieceInfo(stmthp, errhp, &paramhp, NULL, OCI_PARAM_INOUT, OCI_DEFAULT);
OCIDefineByPos(stmthp, &paramhp, errhp, 3, (void*) &age, sizeof(int), SQLT_INT, NULL, NULL, NULL, OCI_DEFAULT);
// 执行语句
OCIStmtExecute(svchp, stmthp, errhp, 1, 0, NULL, NULL, OCI_COMMIT_ON_SUCCESS);
// 释放语句句柄
OCIHandleFree(stmthp, OCI_HTYPE_STMT);

// ... 以下省略其他代码 ...

return 0;
}

上述代码中,首先使用OCIHandleAlloc函数分配了一个语句句柄。然后通过OCIStmtPrepare函数准备了一个插入语句。接着使用OCIDefineByPos函数将要插入的数据绑定到语句中的参数上。最后使用OCIStmtExecute函数执行插入语句。

4. 关闭数据库连接

使用完数据库后,需要关闭数据库连接以释放资源。下面是一个用于关闭Oracle数据库连接的示例代码:

“`c

#include

#include

int mn() {

OCIEnv* envhp;

OCIError* errhp;

OCIServer* srvhp;

OCISvcCtx* svchp;

OCISession* sesionhp;

sword status;

// … 以上省略初始化OCI环境和创建数据库连接的代码 …

// 断开会话

OCISessionEnd(svchp, errhp, sesionhp, OCI_DEFAULT);

// 释放会话句柄

OCIHandleFree(sesionhp, OCI_HTYPE_SESSION);

// 分配语句句柄

OCIHandleFree((void*) envhp, OCI_HTYPE_STMT);

// 断开服务器连接

OCIServerDetach(srvhp, errhp, OCI_DEFAULT);

// 释放服务器句柄

OCIHandleFree(srvhp, OCI_HTYPE_SERVER);

// 释放服务上下文句柄

OCIHandleFree(svchp, OCI_HTYPE_SVCCTX);

// 释放错误句柄

OCIHandleFree(errhp, OCI_HTYPE_ERROR);

// 释放OCI环境

OCIHandleFree(envhp, OCI_HTYPE_ENV);

return 0;

}


上述代码中,首先使用OCISessionEnd函数断开会话。然后使用OCIHandleFree函数分别释放会话句柄、语句句柄、服务器句柄、服务上下文句柄和错误句柄。最后使用OCIHandleFree函数释放OCI环境。

总结

本文介绍

数据运维技术 » C语言实现数据插入Oracle数据库(c 数据插入oracle)