C语言连接Oracle数据库(c 联接 oracle)
C语言连接Oracle数据库
Oracle数据库是一种非常流行的企业级关系型数据库。在现代企业中,许多应用程序需要访问Oracle数据库。C语言是一种广泛使用的编程语言,可以用于开发各种类型的应用程序。本文将介绍如何使用C语言连接Oracle数据库。
1、安装Oracle Instant Client
首先要安装Oracle Instant Client。它是Oracle提供的一种轻量级客户端,可以让您连接到Oracle数据库。您可以从Oracle下载网站上下载Oracle Instant Client。
2、设置环境变量
在安装Oracle Instant Client后,您需要设置环境变量。在Windows系统中,您需要将ORACLE_HOME和PATH环境变量设置为Oracle Instant Client的安装目录。在Linux系统中,您需要将LD_LIBRARY_PATH环境变量设置为Oracle Instant Client的安装目录。环境变量的设置方式可以根据系统平台来定制。
3、编写C语言程序
在使用C语言连接Oracle数据库之前,您需要了解Oracle提供的OCI API。OCI API是Oracle提供的C语言API,可以让您以编程方式访问Oracle数据库。您可以在Oracle官方文档中找到OCI API的参考。
以下是一个简单的C语言程序,它连接到Oracle数据库,执行一条SQL语句,并输出查询结果。
#include
#include
#include
int mn(){
OCIEnv *envhp; OCIError *errhp;
OCISvcCtx *svchp; OCIServer *srvhp;
OCISession *authp; OCIStmt *stmthp;
OCIDefine *defnp; OCIParam *parmp;
OCILobLocator *lobp; sword status;
int empno, sal; char ename[20], dname[20];
OCIInitialize((ub4) OCI_OBJECT, (dvoid *)0, (dvoid * (*)(dvoid *, size_t)) 0,
(dvoid * (*)(dvoid *, dvoid *, size_t)) 0, (void (*)(dvoid *, dvoid *)) 0 );
OCIEnvInit(&envhp, OCI_DEFAULT, 0, (dvoid **) 0); OCIHandleAlloc((dvoid *) envhp, (dvoid **) &errhp, OCI_HTYPE_ERROR, 0, 0);
OCIHandleAlloc((dvoid *) envhp, (dvoid **) &srvhp, OCI_HTYPE_SERVER, 0, 0); OCILogon2(envhp, errhp, &svchp, "scott", 5,
"tiger", 5, "ORCL", 4, OCI_DEFAULT);
OCIHandleAlloc((dvoid *) envhp, (dvoid **) &authp, OCI_HTYPE_SESSION, (size_t) 0, 0); OCIAttrSet((dvoid *) authp, OCI_HTYPE_SESSION, (dvoid *) svchp,
(ub4) sizeof(OCISvcCtx *), OCI_ATTR_SERVER, errhp); OCIAttrSet((dvoid *) authp, OCI_HTYPE_SESSION, (dvoid *) "scott",
(ub4) strlen("scott"), OCI_ATTR_USERNAME, errhp); OCIAttrSet((dvoid *) authp, OCI_HTYPE_SESSION, (dvoid *) "tiger",
(ub4) strlen("tiger"), OCI_ATTR_PASSWORD, errhp); OCISessionBegin(svchp, errhp, authp, OCI_CRED_RDBMS,
OCI_DEFAULT);
OCIHandleAlloc(envhp, (dvoid **)&stmthp, OCI_HTYPE_STMT, (size_t)0, (dvoid**)0); OCIStmtPrepare(stmthp, errhp, "SELECT empno, ename, dname, sal FROM emp, dept WHERE emp.deptno = dept.deptno", (ub4)strlen("SELECT empno, ename, dname, sal FROM emp, dept WHERE emp.deptno = dept.deptno"), OCI_NTV_SYNTAX, OCI_DEFAULT);
OCIDefineByPos(stmthp, &defnp, errhp, 1, &empno, sizeof(empno), SQLT_INT, NULL, NULL, NULL, OCI_DEFAULT); OCIDefineByPos(stmthp, &defnp, errhp, 2, ename, sizeof(ename), SQLT_STR, NULL, NULL, NULL, OCI_DEFAULT);
OCIDefineByPos(stmthp, &defnp, errhp, 3, dname, sizeof(dname), SQLT_STR, NULL, NULL, NULL, OCI_DEFAULT); OCIDefineByPos(stmthp, &defnp, errhp, 4, &sal, sizeof(sal), SQLT_INT, NULL, NULL, NULL, OCI_DEFAULT);
OCIStmtExecute(svchp, stmthp, errhp, (ub4)1, (ub4)0, (OCISnapshot*)NULL, (OCISnapshot*)NULL, OCI_DEFAULT); while ((status = OCIStmtFetch2(stmthp, errhp, 1, OCI_FETCH_NEXT, (sb4)0, OCI_DEFAULT)) == OCI_SUCCESS)
{ printf("empno=%d, ename=%s, dname=%s, sal=%d\n",
empno, ename, dname, sal); }
OCIStmtFree(stmthp, OCI_DEFAULT); OCISessionEnd(svchp, errhp, authp, OCI_DEFAULT);
OCILogoff(svchp, errhp); OCIHandleFree(envhp, OCI_HTYPE_ERROR);
OCIHandleFree(envhp, OCI_HTYPE_SERVER); OCIHandleFree(envhp, OCI_HTYPE_SESSION);
OCIHandleFree(envhp, OCI_HTYPE_ENV);
return 0;}
在这个程序中,我们首先使用OCIInitialize函数初始化OCI库。然后,我们使用OCIEnvInit函数初始化OCI环境。接下来,我们使用OCILogon2函数登录Oracle数据库。
然后,我们创建一个OCIStmt对象,并使用OCIStmtPrepare函数准备一条SQL查询语句。然后,我们使用OCIDefineByPos函数定义查询结果集中的每个字段。我们使用OCIStmtExecute函数执行查询,并使用OCIStmtFetch2函数逐行检索查询结果,并将检索到的行输出到屏幕上。
4、编译和运行程序
在Linux系统中,您可以使用以下命令编译程序:
gcc -o myprogram myprogram.c -L/oracle/instantclient_21_1 -lclntsh
在Windows系统中,您可以使用以下命令编译程序:
cl /I"c:\oracle\instantclient_21_1\sdk\include" myprogram.c "c:\oracle\instantclient_21_1\vc_x64\vc14\lib\oraocci21.lib" "c:\oracle\instantclient_21_1\vc_x64\vc14\lib\oci.lib"
然后,您可以运行程序并查看输出结果。如果一切正常,则程序将连接到Oracle数据库,并显示查询结果。
总结
使用C语言连接Oracle数据库并不复杂。只需安装Oracle Instant Client,设置环境变量,编写C语言程序即可。在编写程序时,您需要了解OCI API,并使用OCI对象来操作Oracle数据库。祝您好运!