c语言和python连接oracle

 c语言调用OCI接口连接oracle

(1)OCI接口是什么?

OCI是Oracle公司提供的由头文件和库函数等组成的一个访问Oracle数据库的应用程序编程接口,,允许开发人员在第三代编程语言(包括C, C++, COBOL 与 FORTRAN)中通过SQL(Structure Query Language)来操纵Oracle数据库。

简而言之,OCI接口可以内嵌到c语言中操作oracle数据库。

(2)OCI接口使用

OCI编程一般步骤是:初始化环境句柄、生成其他各类句柄、建立数据库连接进行登录、执行SQL语句,对返回的结果进行处理、终止用户会话,断开连接,释放各种句柄。

涉及主要函数流程为

1.创建OCI环境

        OCIEnvCreate(); 

2.申请句柄

        句柄是指向OCI库所分配的内存区域的指针,该内存区域中的数据由OCI库维护,应用程序可通过句柄访问其中的数据。
       一个句柄可以用来存放上下文或连接信息(如环境或服务上下文句柄).它是由链接库管理,可以简化编程。利用OCIAtrrtGet()和OCIAtrrSet()这些获取或设置属性的OCI接口可以访问到句柄中存放信息。

        sword OCIHandleAlloc( 
                CONST dvoid *parenth,  //新申请句柄的父句柄,一般为OCI环境句柄 
                Dvoid **hndlpp,   //申请的新句柄 
                Ub4 type, type,  //句柄类型 
                Size_t xtramem_sz,   //申请的内存数 
                Dvoid **usrmempp  //申请到的内存块指针 

        )

一般需要申请的句柄有以下几类:

服务器句柄OCIServer, 句柄类型OCI_HTYPE_SERVER 
错误句柄OCIError,用于捕捉OCI错误信息, 句柄类型OCI_HTYPE_ERROR 
事务句柄OCISession, 句柄类型OCI_HTYPE_SESSION 
上下文句柄OCISvcCtx, 句柄类型OCI_HTYPE_SVCCTX 
SQL语句句柄OCIStmt, 句柄类型OCI_HTYPE_STMT

(3)读取/设置句柄属性

        OCIAttrSet)();

        swResult = OCIAttrSet(usrhp, OCI_HTYPE_SESSION,  (text*) username, strlen(username),
OCI_ATTR_USERNAME, errhp);   //比如设置数据库用户名和密码

(4)连接数据库

        多用户方式连接: 
        sword  OCIServerAttach(); //其中参数4OCI_DEFAUL:表示应用程序的操作模式为阻塞模式,在这种方式下,只有当OCI调用完成后才将控制权返回给客户端应用程序;参数2还需要设置数据库的SID;

        单用户方式连接: 
        sword OCILogon ();

(5)执行SQL语句并处理数据

        比如查询多行数据

       OCIStmtPrepare():设置缓冲区,将单次查询返回多行结果放在存储区里

       OCIDefineByPos():建立所选字段中的一个字段和输出缓冲区的结合。这个函数定义一个将要从 Oracle  服务器中获取数据的输出缓冲区。这个函数会为所选字段隐式地分配定义句柄。如果*defnpp  为一个非空指针,OCI  假设这个指针指向一个之前通过 OCIHandleAlloc()函数或者 OCIDefineByPos()函数分配的有效的句柄。  //备注1

        OCIAttrGet():设置执行语句类型

        OCIStmtExecute():这个函数用来执行一个已经准备好的 SQL 语句。调用这个函数时,应用程序与服务器建立请求。

        OCIStmtFetch2()利用游标获取信息循环,取出多行数据  //备注2

        OCIAttrGet()//与sizeof(游标),可获取查询到总行数   //备注3

        注意:执行函数时如果报错return前需要释放句柄,OCIHandleFree()

                如果是更新或者改动或者删除则需要提交到数据库,Oci_commit(),且备注123不需要执行

(6)结束会话断开数据库连接

        多用户:sword OCIServerDetach ( )

        单用户:sword OCILogoff ()

(7)断开与数据源的连接,释放句柄
       OCIServerDetach()断开与数据源的连接:

        sword OCIHandleFree( 
                dvoid *hndlp,  //要释放的句柄 
                ub4 type   //句柄类型 

        )

python与数据库连接

(1)下载 instantclient压缩包并解压到相关目录

(2)导入包,连接数据库

        import cx_Oracle

        connect = cx_Oracle.connect(user + "/" + pwd + "@" + ip + ":" + port + "/" + sid)

        cursor = connect.cursor()

(3)实现增删改查

        cursor.execute(sql);  //注意每次使用游标前需要将游标返回表头

        cursor.execute(sql)

        connect.commit()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值