初涉OCILIB的使用

C++ 使用OCILIB 连接Oracle数据库 总结

http://wenku.baidu.com/link?url=1uUiWbsB84Bqe4ct9rU1u9fNo8C4OeQPk-HC9c1DHJlnQ2Ns6uge6UTwqdxbIpzbUsMhETuyHfDBUKxtif_mhQ3wVgX1fml4lIl5auvTWvO

======
引言
======
在C++下连接Oracle的方式可以使用OCI。
OCI是甲骨文提供Oracle调用接口(Oracle Call Interface简称OCI)
,是Oracle数据库访问的基础接口。
OCI访问Oracle虽然效率很高,但OCI的API
非常复杂,一个简单的功能就需要编写相当多的代码。后来
Oracle为C++提供了一套新的OCCI(Oracle C++ Call Interface)
接口。该接口使用起来较为简单,但Oracle对其支持力度有限,且
occi库对编译器,编译器版本,数据库版本,crt版本,操作平台版本都有诸
多限制。因此,出现了一些封装oci但是是以类jdbc或者occi风格的wrapper
库,比如oraLib,ocilib,ocl。本文中使用的即是OCILIB。


初涉OCILIB的使用

标签: sqlinsertoracle数据库sessionnull
5198人阅读 评论(0) 收藏 举报
 

1.  ocilib的使用

利用ocilib操作oracle数据库

1)   首先初始化

OCI_Initialize(err_handler, NULL, OCI_ENV_THREADED)

这里的第一个参数是异常错误处理函数。

2)   创建连接

定义OCI_Connection* m_pConntion并为m_pConntion赋值。

m_pConntion = OCI_ConnectionCreate(csServerDataBase, csServerUser, csServerPassWord, OCI_SESSION_DEFAULT)

这里的第一个参数是oracle数据库ip,端口及名字组成的字符串,172.7.14.6:1521/ORCL。第二个参数是用户名,第三个参数是密码。

3)   由已得的oci_connection*创建OCI_Statement* m_stRow。

m_stRow = OCI_StatementCreate(m_pConntion)。之后的SQL语句均与这个oci_statement*有关。

4)   对于返回记录集的SQL语句。

OCI_ExecuteStmt(m_stRow, csSQL)。

这里第一个参数就是OCI_Statement*  的对象,也就是之前有oci_connection*所创建的。第二个参数就是要执行的SQL语句。如果要获取记录集,首先要定义一个记录集指针OCI_Resultset* rsRow,然后调用rsRow = OCI_GetResultset(m_stRow),这里的参数仍然是OCI_Statement* 基本上要执行SQL语句都会用到这个。然后可以调用OCI_FetchNext(rsRow)来获取记录集中下一个记录,如果配合while循环就可以遍历记录集。对于回去每一条记录的每个字段,要使用OCI_Get***,这里的***就是数据类型,常用的由OCI_GetInt,OCI_GetString,GetLob,OCI_GetDate OCI_GetTimestamp等等。

5)   对于没有记录集的操作,比如insert,可以使用上面的方法。Ocilib还提供了一种方式:bind方式。

对于这种方式,SQL语句也有一些小的变化,这里存在了占位的概念。比如这样的一个SQL语句:sqlInsert.Format("Insert into TableName(DeviceIndex,DrivewayNumber,DirectName,PlateInfo,PlateType,AlarmPlace,AlarmTime ,AlarmAction,VehicleSpeed,VehicleType,VehicleLen,VehicleColor,PlateColor,AlarmAdd,PicNum,PicFullView)values(:DeviceIndex,:DrivewayNumber,:DirectName,:PlateInfo,:PlateType,:AlarmPlace,:AlarmTime,:AlarmAction,:VehicleSpeed,:VehicleType,:VehicleLen,:VehicleColor,:PlateColor,:AlarmAdd,:PicNum,:PicfullView)"

这里的:DeviceIndex等都是随意起名字的,当然为了可读性,可以与字段起相同的名字,“:”一定要有的。

OCI_Prepare(m_stRow, sqlInsert.GetBuffer());这里的第一个参数仍然是oci_statement*。这句话也是必须的。之后就要将变量与字段名绑定在一起,比如:OCI_BindString(m_stRow, ":DeviceIndex", struAlarmTable.csDeviceIndex.GetBuffer(), 0);第二个参数就是前面SQL语句中占位变量的名字,第三个参数是要绑定到字段的具体的变量。可以绑定的类型由很多的。在每个字段都完成绑定后调用OCI_Execute(m_stRow),然后再调用OCI_Commit(m_pConntion),这样就完成了插入语句。当然这仅仅是插入一条数据,如果要进行批量绑定并插入,这里不做说明。

6)   退出时要记得释放资源

OCI_StatementFree(m_stRow)

OCI_ConnectionFree(m_pConntion);

 

 

0
0
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值