c oracle 例子
C和Oracle是两个非常重要的编程和数据库技术,分别在不同的领域中发挥着至关重要的作用。C语言是一门很古老的编程语言,它已经陪伴着计算机发展了很长时间,而Oracle则是一种广泛使用的关系型数据库管理系统。当两个技术组合在一起时,会给我们带来很多有趣的例子和应用场景。
C语言可以很好地与Oracle集成,实现数据在Oracle数据库和C程序之间的交互。下面我们来看一个简单的例子。
#include #include #include int main (int argc, char const *argv[]) { OCIEnv *envhp; OCIError *errhp; OCIServer *srvhp; OCISvcCtx *svchp; OCISession *authp; OCIStmt *stmthp; sword status; char username[20], password[20], query[100], name[20], grade[5]; int id; OCIDefine *defhp1, *defhp2, *defhp3; // 创建环境句柄 status = OCIEnvCreate(&envhp, OCI_THREADED | OCI_OBJECT, 0, 0, 0, 0, 0, 0); if (status != OCI_SUCCESS) { printf("OCIEnvCreate failed\n"); return 1; } // 创建错误句柄 OCIHandleAlloc(envhp, (void**)&errhp, OCI_HTYPE_ERROR, 0, 0); // 创建服务器句柄 OCIHandleAlloc(envhp, (void**)&srvhp, OCI_HTYPE_SERVER, 0, 0); // 创建服务上下文句柄 OCIHandleAlloc(envhp, (void**)&svchp, OCI_HTYPE_SVCCTX, 0, 0); // 连接数据库 strcpy(username, "username"); strcpy(password, "password"); OCIServerAttach(srvhp, errhp, (text*)"ORCL", strlen("ORCL"), OCI_DEFAULT); OCIAttrSet(svchp, OCI_HTYPE_SVCCTX, srvhp, 0, OCI_ATTR_SERVER, errhp); OCIHandleAlloc(envhp, (void**)&authp, OCI_HTYPE_SESSION, 0, 0); OCIAttrSet(authp, OCI_HTYPE_SESSION, username, strlen(username), OCI_ATTR_USERNAME, errhp); OCIAttrSet(authp, OCI_HTYPE_SESSION, password, strlen(password), OCI_ATTR_PASSWORD, errhp); status = OCISessionBegin(svchp, errhp, authp, OCI_CRED_RDBMS, OCI_DEFAULT); OCIAttrSet(svchp, OCI_HTYPE_SVCCTX, authp, 0, OCI_ATTR_SESSION, errhp); // 执行查询语句 id = 3; sprintf(query, "SELECT name, grade FROM students WHERE id = %d", id); OCIHandleAlloc(envhp, (void**)&stmthp, OCI_HTYPE_STMT, 0, 0); OCIStmtPrepare(stmthp, errhp, query, strlen(query), OCI_NTV_SYNTAX, OCI_DEFAULT); OCIHandleAlloc(envhp, (void**)&defhp1, OCI_HTYPE_DEFINE, 0, 0); OCIHandleAlloc(envhp, (void**)&defhp2, OCI_HTYPE_DEFINE, 0, 0); OCIHandleAlloc(envhp, (void**)&defhp3, OCI_HTYPE_DEFINE, 0, 0); OCIDefineByPos(stmthp, &defhp1, errhp, 1, name, sizeof(name), SQLT_STR, 0, 0, 0, OCI_DEFAULT); OCIDefineByPos(stmthp, &defhp2, errhp, 2, grade, sizeof(grade), SQLT_STR, 0, 0, 0, OCI_DEFAULT); OCIStmtExecute(svchp, stmthp, errhp, 1, 0, 0, 0, OCI_DEFAULT); // 处理结果 printf("Student Information:\n"); printf("Name: %s\n", name); printf("Grade: %s\n", grade); // 断开连接 status = OCISessionEnd(svchp, errhp, authp, OCI_DEFAULT); OCIServerDetach(srvhp, errhp, OCI_DEFAULT); OCIHandleFree(authp, OCI_HTYPE_SESSION); OCIHandleFree(srvhp, OCI_HTYPE_SERVER); OCIHandleFree(svchp, OCI_HTYPE_SVCCTX); OCIHandleFree(stmthp, OCI_HTYPE_STMT); OCIHandleFree(errhp, OCI_HTYPE_ERROR); OCIHandleFree(envhp, OCI_HTYPE_ENV); return 0; }