C语言连接Oracle数据库的方式简介(c 连接oracle方式)

C语言连接Oracle数据库的方式简介

Oracle数据库是目前全球最为流行和广泛使用的商业数据库软件之一。C语言是一门广泛应用于系统开发和嵌入式软件的高级编程语言。本文将介绍使用C语言连接Oracle数据库的几种方式。

1.使用OCI连接Oracle数据库

OCI(Oracle Call Interface)是Oracle提供的标准C语言API。通过OCI,可以在C语言程序中调用Oracle数据库。OCI提供了访问和操作Oracle数据库的丰富功能,并易于使用和集成。使用OCI连接Oracle数据库需要安装Oracle客户端和OCI头文件,并链接OCI库。以下是一个简单的使用OCI连接Oracle数据库的示例程序:

“`c

#include //OCI头文件

#include

int mn()

{

OCIEnv *env; //OCI服务上下文句柄

OCIError *err; //OCI错误句柄

OCISvcCtx *svc; //OCI服务上下文句柄

OCISession *sesh; //OCI会话句柄

OCIStmt *stmt; //OCI语句句柄

//初始化OCI服务上下文句柄

OCIInitialize(OCI_DEFAULT, 0, 0, 0, 0);

OCIEnvInit(&env, OCI_DEFAULT, 0, 0);

//创建OCI错误句柄

OCIHandleAlloc(env, (void **)&err, OCI_HTYPE_ERROR, 0, NULL);

//创建OCI服务上下文句柄

OCIHandleAlloc(env, (void **)&svc, OCI_HTYPE_SVCCTX, 0, NULL);

//连接到数据库

OCIAttrSet(svc, OCI_HTYPE_SVCCTX, (void *)db, strlen(db), OCI_ATTR_HOSTNAME, err);

OCIAttrSet(svc, OCI_HTYPE_SVCCTX, (void *)db, strlen(db), OCI_ATTR_USERNAME, err);

OCIAttrSet(svc, OCI_HTYPE_SVCCTX, (void *)pwd, strlen(pwd), OCI_ATTR_PASSWORD, err);

if(OCILogon(env, err, &svc, strlen(user), (unsigned char *)user, strlen(pwd), (unsigned char *)pwd, (unsigned char *)db))

{

printf(“Connect to Oracle database fled.\n”);

return -1;

}

//创建OCI会话句柄

OCIHandleAlloc(env, (void **)&sesh, OCI_HTYPE_SESSION, 0, NULL);

//设置用户上下文

OCIAttrSet(sesh, OCI_HTYPE_SESSION, (void *)user, strlen(user), OCI_ATTR_USERNAME, err);

OCIAttrSet(sesh, OCI_HTYPE_SESSION, (void *)pwd, strlen(pwd), OCI_ATTR_PASSWORD, err);

//连接到数据库

if(OCISessionBegin(svc, err, sesh, OCI_SYSDBA))

{

printf(“Connect to Oracle database fled.\n”);

return -1;

}

//创建OCI语句句柄

OCIHandleAlloc(env, (void **)&stmt, OCI_HTYPE_STMT, 0, NULL);

//执行SQL语句

OCIStmtPrepare(stmt, err, (unsigned char *)”select * from emp”, strlen(“select * from emp”), OCI_NTV_SYNTAX, OCI_DEFAULT);

OCIStmtExecute(svc, stmt, err, 1, 0, NULL, NULL, OCI_DEFAULT);

//关闭OCI会话和服务上下文

OCISessionEnd(svc, err, sesh, OCI_COMMIT_ON_SUCCESS);

OCILogoff(svc, err);

return 0;

}


2.使用ODBC连接Oracle数据库

ODBC(Open Database Connectivity)是微软提出的一种通过API实现跨平台和多种数据库连接的标准接口。由于Oracle也提供了ODBC驱动程序,因此可以使用C语言通过ODBC连接Oracle数据库。使用ODBC连接Oracle数据库需要先安装ODBC驱动程序和unixODBC(Linux/Unix操作系统下的ODBC管理器)或Windows自带的ODBC管理器。以下是一个简单的使用ODBC连接Oracle数据库的示例程序:

```c
#include
#include
#include
int mn()
{
SQLHENV env; //ODBC环境句柄
SQLHDBC dbc; //ODBC数据库连接句柄
SQLHSTMT stmt; //ODBC语句句柄

//创建ODBC环境句柄
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);

//创建ODBC数据库连接句柄
SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
SQLDriverConnect(dbc, NULL, (SQLCHAR *)"server=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SID=orcl)));uid=scott;pwd=tiger;", SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);

//创建ODBC语句句柄
SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);

//执行SQL语句
SQLExecDirect(stmt, (SQLCHAR *)"select * from emp", SQL_NTS);

//关闭ODBC语句、数据库连接和环境句柄
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
SQLDisconnect(dbc);
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
SQLFreeHandle(SQL_HANDLE_ENV, env);

return 0;
}

3.使用Pro*C连接Oracle数据库

Pro*C是Oracle提供的一个可以将C语言源程序和SQL语句混合在一起的预处理器,将混合后的源程序编译后可以链接到Oracle数据库。使用Pro*C连接Oracle数据库需要安装Pro*C和Oracle客户端。以下是一个简单的使用Pro*C连接Oracle数据库的示例程序:

“`c

#include

#include

#include

#define VARCHAR2_CS (512)

struct EmpRec {

char empno[7+1];

char ename[40+1];

char job[30+1];

char mgr[7+1];

char hiredate[15+1];

char sal[7+1];

char comm[7+1];

char deptno[7+1];

};

char *username = “scott”;

char *password = “tiger”;

char *database = “orcl”;

EXEC SQL BEGIN DECLARE SECTION;

char conStr[512];

struct EmpRec emp;

VARCHAR2 ename VARCHAR2_CS;

VARCHAR2 job VARCHAR2_CS;

VARCHAR2 hiredate VARCHAR2_CS;

EXEC SQL END DECLARE SECTION;

int mn()

{

//构建连接字符串

sprintf(conStr, “user=%s password=%s dbname=%s”, username, password, database);

//连接数据库

EXEC SQL CONNECT :conStr;

if(sqlca.sqlcode

{

printf(“Connect to Oracle database fled.\n”);

return -1;

}

//执行SQL语句

EXEC SQL SELECT empno,ename,job,mgr,hiredate,sal,comm,deptno INTO :emp.empno,:ename,:job,:emp.mgr,:hiredate,:emp.sal,:emp.comm,:emp.deptno FROM emp WHERE empno = ‘7369’;

if(sqlca.sqlcode

{

printf(“Exec SQL fled.\n”);

return -1;

}

//将VARCHAR2类型转换为char类型

strncpy(emp.ename, (char *)ename.arr, (size_t)ename.len);

strncpy(emp.job, (char *)job.arr, (size_t)job.len);

strncpy(emp.hiredate, (char *)hiredate.arr, (size_t)hiredate.len);

emp.ename[ename.len] = ‘\0’;

emp.job[job.len] = ‘\0’;

emp.hiredate[hiredate.len] = ‘\0’;

//打印查询结果

printf(“empno=%s,ename=%s,job=%s,mgr=%s,hiredate=%s,sal=%s,comm=%s,deptno=%s\n”,

emp.empno, emp.ename, emp.job, emp.mgr, emp.hiredate, emp.sal, emp.comm, emp.deptno);

//断开数据库连接

EXEC SQL DISCONNECT;

return 0;

}


总结

本文介绍了使用OCI、ODBC和Pro*C三种方式使用C语言连接Oracle数据库的基本操作,希望能对需要使用C语言访问Oracle数据库的开发人员有所帮助。

数据运维技术 » C语言连接Oracle数据库的方式简介(c 连接oracle方式)