C 是一种通用编程语言,被广泛应用于开发不同类型的软件。常用的关系型数据库之一是 Oracle 数据库,我们可以使用 C 语言向 Oracle 数据库中插入数据。本文将介绍如何使用 C 语言向 Oracle 数据库中插入数据。
首先,我们需要使用 Oracle 提供的预编译器 OCI (Oracle Call Interface)库,它提供了访问 Oracle 数据库的 API 。以下为向 Oracle 数据库中插入一个简单的用户信息示例:
#include
#include
#include
#include
#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 数据库,并对其中的数据进行增删改查等操作。