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环境。
总结
本文介绍
相关文章
- 快速导入 Oracle 数据库: 使用 Dmp 文件(oracle数据库导入dmp文件)
- Oracle数据库中移动分区表实践(oracle移动分区表)
- 实现 Oracle 数据库的高可用方案:视频指南(oracle高可用视频)
- 字符串Oracle中查询逗号分隔字符串的方法(oracle查询逗号分隔)
- 性能Oracle性能优化实战:解决数据库性能瓶颈问题(关oracle)
- 深入浅出Oracle字符类型C(oracle字符c)
- Oracle数据库中的触发器类型研究(oracle触发器类型)
- Oracle数据库的转储与恢复(oracle转储)
- 如何使用Oracle创建用户(oracle怎么创建用户)
- 如何查询Oracle数据库版本?(oracle版本查询)
- 深入实践:Oracle实训如何提高职场竞争力?(oracle实训)
- 解决Oracle存储过程乱码问题的方法(oracle存储过程乱码)
- 在Oracle社区交流,撩拨你的思维!(oracle交流群)
- Oracle数据库出现错误1067求助!(oracle错误1067)
- 妙用Oracle写值函数实现灵活操作(oracle写值函数)
- Oracle 关闭自增 让其他策略起作用(oracle 关闭自增)
- Oracle 数据库快速入门一个实例学习指南(oracle 入门实例)
- 在Ad域环境中使用Oracle数据库(ad域 oracle)
- Oracle中的重做日志保护数据的坚实基石(oracle中的重做日志)
- 利用Oracle云服务器提高企业高效运维(oracle云服务器使用)
- Oracle数据库表的备份与恢复方法(oracle中如何备份表)
- Oracle数据库中实现大小写转换的方法(oracle中大小写转换)
- iver Oracle 数据库数据档案备份与管理(oracle下的arch)
- Oracle 76全新的数据库性能体验(oracle 7.6)