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数据库的开发人员有所帮助。
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 C语言连接Oracle数据库的方式简介(c 连接oracle方式)
相关文章
- 解决Oracle数据库密码修改问题(oracle修改数据库密码)
- Oracle 视图 DBA_ADVISOR_RATIONALE 官方解释,作用,如何使用详细说明
- 完美解决Oracle日志切换技巧(日志切换oracle)
- 修改Oracle数据库中列的类型(oracle列类型修改)
- Oracle数据库中的触发器类型(oracle触发器类型)
- 深入探究Oracle参数定义,优化数据库性能(oracle参数定义)
- 如何查询和调整Oracle数据库表的大小(oracle数据库表大小)
- Oracle数据库里的返回类型浅析(oracle返回类型)
- 理解Oracle数据库层次结构(oracle层次结构)
- 使用JDBC快速访问Oracle数据库(jdbc访问oracle)
- 考试考研 Oracle 内部任职资格考试指南(oracle内部任职资格)
- Oracle 关闭缓存优化数据库性能(oracle 关闭缓存)
- Oracle数据库中常用的几种段类型(oracle几种类型段)
- Oracle数据库的几种模式探究(oracle几种模式)
- 拓展数据库技能C语言调用Oracle包(c oracle 包调用)
- Oracle数据库中的交叉锁机制(oracle交叉锁)
- Oracle数据库中字典表的用处(oracle中的字典表)
- Oracle中如何创建数据库(oracle 中创建库)
- Oracle数据库SGA检查调整使用最优策略(oracle中sga检查)
- Oracle在彼岸超越规矩的数据库之旅(oracle不在这个范围)
- Oracle Web注册流程解析(oracle web注册)
- 探究Oracle J一款特别的数据库解决方案(oracle j是什么)