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数据库的开发人员有所帮助。