C 语言配置Oracle数据库连接(c oracle配置连接)

C 语言配置 Oracle 数据库连接

在进行 C 语言开发过程中,经常需要与数据库进行交互,而 Oracle 数据库是广泛应用的一种数据库管理系统。本文将介绍在 C 语言开发中如何配置 Oracle 数据库连接。

1. 下载 Oracle Instant Client

Oracle Instant Client 是 Oracle 公司提供的一个小型的客户端程序包,以便在没有完整 Oracle 客户端安装的情况下进行访问 Oracle 数据库。我们可以从官方网站(https://www.oracle.com/database/technologies/instant-client/downloads.html)下载适用于自己的操作系统的版本。

2. 配置环境变量

下载完 Oracle Instant Client 后,需要将其添加到环境变量中。以 Windows 操作系统为例,可以将 Instant Client 文件夹(例如:C:\instantclient_19_11)添加到系统环境变量的 PATH 中。

在 Linux 操作系统中,可以将 Instant Client 文件夹路径添加到 /etc/profile 中,然后运行 source /etc/profile 或重新启动系统。

3. 配置头文件和库文件

在 C 语言中要使用 Oracle 连接,需要引用相应的头文件和库文件。在 Oracle Instant Client 下载的文件夹中,可以找到头文件和库文件的路径。其中,头文件包括 oci.h 和 ociextp.h,库文件包括 libclntsh.so 和 libocci.so(在 Windows 中对应其它文件名)。

在编译 C 语言程序时,需要将这些文件路径传递给编译器。例如,在 Linux 中可以使用以下命令:

gcc -o test test.c -I /usr/include/oracle/xx.x/client64 -L /usr/lib/oracle/xx.x/client64 -lclntsh -locci

其中,xx.x 是 Oracle Instant Client 的版本号。

4. 编写连接代码

一旦在 C 语言开发环境中配置了 Oracle 连接所需的文件和路径,就可以开始编写连接代码了。以下是一个连接 Oracle 数据库并执行简单查询的示例代码:

#include

#include

#include

#define USERNAME “your_username”

#define PASSWORD “your_password”

#define DATABASE “your_database”

#define QUERY “SELECT * FROM emp”

int mn() {

OCIEnv *envhp;

OCIError *errhp;

OCISvcCtx *svchp;

OCIStmt *stmthp;

OCIDefine *defnp;

OCIBind *bndhp;

OCIParam *parmp;

sword status;

ub4 rowcnt = 0;

int empno;

char ename[30];

int sal;

status = OCIEnvCreate(&envhp, OCI_THREADED | OCI_OBJECT, 0, 0, 0, 0, 0, 0);

if (status != OCI_SUCCESS) {

printf(“OCIEnvCreate fled\n”);

return 1;

}

status = OCIHandleAlloc(envhp, (void**)&errhp, OCI_HTYPE_ERROR, 0, 0);

if (status != OCI_SUCCESS) {

printf(“OCIHandleAlloc fled\n”);

return 2;

}

status = OCIHandleAlloc(envhp, (void**)&svchp, OCI_HTYPE_SVCCTX, 0, 0);

if (status != OCI_SUCCESS) {

printf(“OCIHandleAlloc fled\n”);

return 3;

}

status = OCIHandleAlloc(envhp, (void**)&stmthp, OCI_HTYPE_STMT, 0, 0);

if (status != OCI_SUCCESS) {

printf(“OCIHandleAlloc fled\n”);

return 4;

}

status = OCILogon(envhp, errhp, &svchp, (const OraText*)USERNAME, strlen(USERNAME), (const OraText*)PASSWORD, strlen(PASSWORD), (const OraText*)DATABASE, strlen(DATABASE));

if (status != OCI_SUCCESS) {

printf(“OCILogon fled\n”);

return 5;

}

status = OCIHandleAlloc(envhp, (void**)&bndhp, OCI_HTYPE_BIND, 0, 0);

if (status != OCI_SUCCESS) {

printf(“OCIHandleAlloc fled\n”);

return 6;

}

status = OCIStmtPrepare(stmthp, errhp, (const OraText*)QUERY, strlen(QUERY), OCI_NTV_SYNTAX, OCI_DEFAULT);

if (status != OCI_SUCCESS) {

printf(“OCIStmtPrepare fled\n”);

return 7;

}

status = OCIDefineByPos(stmthp, &defnp, errhp, 1, &empno, sizeof(empno), SQLT_INT, 0, 0, 0, OCI_DEFAULT);

if (status != OCI_SUCCESS) {

printf(“OCIDefineByPos fled\n”);

return 8;

}

status = OCIDefineByPos(stmthp, &defnp, errhp, 2, ename, sizeof(ename), SQLT_STR, 0, 0, 0, OCI_DEFAULT);

if (status != OCI_SUCCESS) {

printf(“OCIDefineByPos fled\n”);

return 9;

}

status = OCIDefineByPos(stmthp, &defnp, errhp, 3, &sal, sizeof(sal), SQLT_INT, 0, 0, 0, OCI_DEFAULT);

if (status != OCI_SUCCESS) {

printf(“OCIDefineByPos fled\n”);

return 10;

}

status = OCIStmtExecute(svchp, stmthp, errhp, 1, 0, 0, 0, OCI_DEFAULT);

if (status != OCI_SUCCESS) {

printf(“OCIStmtExecute fled\n”);

return 11;

}

while ((status = OCIStmtFetch(stmthp, errhp, 1, OCI_FETCH_NEXT, OCI_DEFAULT)) != OCI_NO_DATA) {

if (status != OCI_SUCCESS) {

printf(“OCIStmtFetch fled\n”);

return 12;

}

rowcnt++;

printf(“Emp No: %d, Name: %s, Salary: %d\n”, empno, ename, sal);

}

printf(“Total row count = %d\n”, rowcnt);

OCIStmtRelease(stmthp, errhp, NULL, 0, NULL);

OCISessionEnd(svchp, errhp, NULL, 0);

OCIServerDetach(svchp, errhp, OCI_DEFAULT);

OCIHandleFree(stmthp, OCI_HTYPE_STMT);

OCIHandleFree(svchp, OCI_HTYPE_SVCCTX);

OCIHandleFree(errhp, OCI_HTYPE_ERROR);

OCIHandleFree(envhp, OCI_HTYPE_ENV);

return 0;

}

在以上代码中,我们使用 OCIEnvCreate 创建了一个运行时环境,使用 OCILogon 连接到 Oracle 数据库并预编译查询语句。然后我们使用 OCIDefineByPos 定义结果集,并使用 OCIStmtExecute 执行查询。最后我们使用 OCIStmtFetch 循环获取所有查询结果。

以上是使用 C 语言连接 Oracle 数据库的步骤,希望对您有所帮助。


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