C 是一种通用编程语言,被广泛应用于开发不同类型的软件。常用的关系型数据库之一是 Oracle 数据库,我们可以使用 C 语言向 Oracle 数据库中插入数据。本文将介绍如何使用 C 语言向 Oracle 数据库中插入数据。
首先,我们需要使用 Oracle 提供的预编译器 OCI (Oracle Call Interface)库,它提供了访问 Oracle 数据库的 API 。以下为向 Oracle 数据库中插入一个简单的用户信息示例:
#include <stdio.h> #include <oratypes.h> #include <ocidfn.h> #include <oci.h> #define USERNAME "test" #define PASSWORD "test" #define DATABASE "testdb" int main(){ OCISvcCtx *pSvcCtx = NULL; OCIEnv *pEnv = NULL; OCIError *pErr = NULL; OCIStmt *pStmt = NULL; OCIBind *pBind = NULL; OCIDefine *pDefine = NULL; char query[1024]; int user_id = 0; char user_name[64] = "testuser"; if (OCIEnvCreate(&pEnv, OCI_THREADED|OCI_OBJECT, NULL, NULL, NULL, NULL, 0, NULL) != OCI_SUCCESS){ printf("Failed to create environment handle.\n"); return -1; } if (OCIHandleAlloc((dvoid*)pEnv, (dvoid**)&pErr, OCI_HTYPE_ERROR, 0, NULL) != OCI_SUCCESS){ printf("Failed to allocate error handle.\n"); return -1; } if (OCIHandleAlloc((dvoid*)pEnv, (dvoid**)&pSvcCtx, OCI_HTYPE_SVCCTX, 0, NULL) != OCI_SUCCESS){ printf("Failed to allocate service context handle.\n"); return -1; } if (OCIHandleAlloc((dvoid*)pEnv, (dvoid**)&pStmt, OCI_HTYPE_STMT, 0, NULL) != OCI_SUCCESS){ printf("Failed to allocate statement handle.\n"); return -1; } if (OCILogon(pEnv, pErr, &pSvcCtx, (OraText*)USERNAME, strlen(USERNAME), (OraText*)PASSWORD, strlen(PASSWORD), (OraText*)DATABASE, strlen(DATABASE)) != OCI_SUCCESS){ printf("Failed to log on to Oracle.\n"); return -1; } sprintf(query, "INSERT INTO users (user_id, user_name) VALUES (:user_id, :user_name)"); if (OCIStmtPrepare(pStmt, pErr, (OraText*)query, strlen(query), OCI_NTV_SYNTAX, OCI_DEFAULT) != OCI_SUCCESS){ printf("Failed to prepare statement.\n"); return -1; } if (OCIBindByName(pStmt, &pBind, pErr, (OraText*)":user_id", strlen(":user_id"), (dvoid*)&user_id, sizeof(user_id), SQLT_INT, NULL, NULL, NULL, 0, NULL, OCI_DEFAULT) != OCI_SUCCESS){ printf("Failed to bind user_id.\n"); return -1; } if (OCIBindByName(pStmt, &pBind, pErr, (OraText*)":user_name", strlen(":user_name"), (dvoid*)&user_name, sizeof(user_name), SQLT_STR, NULL, NULL, NULL, 0, NULL, OCI_DEFAULT) != OCI_SUCCESS){ printf("Failed to bind user_name.\n"); return -1; } if (OCIStmtExecute(pSvcCtx, pStmt, pErr, 1, 0, NULL, NULL, OCI_COMMIT_ON_SUCCESS) != OCI_SUCCESS){ printf("Failed to execute statement.\n"); return -1; } printf("Insert succeeded.\n"); OCIStmtRelease(pStmt, pErr, NULL, 0, OCI_DEFAULT); OCILogoff(pSvcCtx, pErr); OCIHandleFree((dvoid*)pStmt, OCI_HTYPE_STMT); OCIHandleFree((dvoid*)pSvcCtx, OCI_HTYPE_SVCCTX); OCIHandleFree((dvoid*)pErr, OCI_HTYPE_ERROR); OCIHandleFree((dvoid*)pEnv, OCI_HTYPE_ENV); return 0; }
以上代码使用了预编译器 OCI 库提供的函数来创建环境、分配错误句柄、连接 Oracle 数据库、为 SQL 语句绑定参数等过程,最终向 Oracle 数据库中插入一条用户信息。
需要注意的是,在使用 bind、define 等函数时都需要指定数据类型,如 SQLT_INT 表示整型,SQLT_STR 表示字符型。另外,还需要注意数据类型的大小,如 sizeof(user_id) 返回整型的大小。
通过 OCI 库,我们可以在 C 语言中轻松地访问 Oracle 数据库,并对其中的数据进行增删改查等操作。