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数据库。祝您好运!


数据运维技术 » C语言连接Oracle数据库(c 联接 oracle)