引用: http://blog.csdn.net/u011311985/article/details/51221898

测试程序我放到 http://download.csdn.NET/detail/u011311985/9499596这个地址中了,有需要的朋友可以下载

一、下载客户端驱动说明

参考网址:

使用ocilib;
http://wenku.baidu.com/link?url=9pHYVD-MEq00_a0E80gzm3fHf7pICM0KsWrrgYAqlnKLpl2OlKnAo5qKM3qtK-oMg1XvcMYfJeciuomYSFDFywDNsyT1O6WfXFQ-Zi3j6zy

VC++中连接Oracle数据库的几种方法:
http://wenku.baidu.com/link?url=28YGj8UHqEmnhOa9BaRCSOI6w_f-QUomD0tjb3rFdEzxZ_8G0LkoCULOnYS0icX6u1KrUIhXPynyDIJPnVQDzlJn_-tlpIdJ1qA1m2IqtsW

OCI接口简介及其在VC++中的应用:
http://blog.csdn.net/cherishlei/article/details/4398867

C++使用OCI连接Oracle :
http://blog.chinaunix.net/uid-21592001-id-3271863.html

Pro*C  OCI  OCCI  及OCI介绍:
http://blog.sina.com.cn/s/blog_4b3c1f950100pvzx.html

OCI编程历程

http://www.cnblogs.com/ychellboy/archive/2010/04/16/1713884.html

使用点:
1、下载instantclient和ocilib(太大,我没有上传,不过需要的东西(除了sqlplus)我都上传并放到测试程序的ocilib目录中和debug目录中了)
    我的instantclient有instantclient-basic-nt-11.2.0.4.0、instantclient-odbc-nt-11.2.0.4.0、instantclient-sdk-nt-11.2.0.4.0、instantclient-sqlplus-nt-11.2.0.4.0
    我的ocilib是ocilib-4.1.0-windows(这里面有demo示例)
    
2、解压下载的压缩包(合并那几个instantclient为instantclient_11_2,程序运行需要知道这个目录)

3、ping服务器地址,telnet查看服务器端口能否访问
    本地cmd访问服务器oracle
    cmd定位到sqlplus.exe所在的目录中(比如,instantclient-sqlplus-nt-11.2.0.4.0目录中就会含有sqlplus.exe)
    > sqlplus /nolog
    > conn 用户名/密码@服务器地址:端口/数据库SID
    eg:conn test/qiantangjiang@192.168.2.201:1521/ORCL

4、运行ocilib-4.1.0-windows的示例(在ocilib-4.1.0-windows\ocilib\proj\test中)可以测试是否能连上服务器的数据库
    运行ocilib的demo时需要把lib32下的dll和lib放到debug中

二、测试程序说明

我的系统是32位,用的Unicode编码

这些文件在下载客户端驱动之后都有(我已经放到我的ocilib目录中和debug目录中了)

访问Oracle数据库需要3个dll文件:oci.dll、ociliba.dll、oraociei11.dll放到和运行程序同一个目录下(比如Debug下)
还要添加环境变量:NLS_LANG 值为 SIMPLIFIED CHINESE_CHINA.ZHS16GBK(不然的话向数据库插入中文会是乱码)

我建了ocilib目录
    ocilib目录中有两个子目录,分别是include和lib32
    include中有ocilib.h        ocilib.hpp        ocilib_core.hpp        ocilib_impl.hpp
    lib32中有libocilib.a、libocilibw.a、ociliba.dll、ociliba.lib、ocilibw.dll、

VS2013属性配置:
字符集:Unicode字符集
(工程|属性|调试)环境:path=..\ocilib\lib32
(工程|属性|C/C++|常规)附加包含目录:..\ocilib\include
(工程|属性|连接器)附加库目录:..\ocilib\lib32

程序中还有
#pragma comment(lib, "..\\ocilib\\lib32\\ociliba.lib")

包含头文件
#include "ocilib.hpp"

初始化操作
Environment::Initialize(Environment::Default,"oci.dll和oraociei11.dll的目录");//第二个参数就是上述lib目录

三、程序展示

    1. #include <string>
    2. #include <iostream>
    3. #include <iomanip>
    4. #include "ocilib.hpp"
    5. #pragma comment(lib, "..\\ocilib\\lib32\\ociliba.lib")
    6. int main()
    7. {
    8. using namespace ocilib;
    9. using namespace std;
    10. //当前程序路径
    11. string szlibpath = "E:\\shuaizy\\Trunk\\oracletest\\Debug";
    12. try
    13. {
    14. Environment::Initialize(Environment::Default, szlibpath);
    15. Connection con("192.168.2.201/orcl", "test", "qiantangjiang");//实例、用户名、密码
    16. Statement st(con);
    17. st.Execute("select * from all_users order by user_id");
    18. Resultset rs = st.GetResultset();
    19. while (rs++)
    20. {
    21. std::cout << std::setw(30) << std::left << rs.Get<ostring>("username")
    22. << std::setw(10) << std::right << rs.Get<ostring>("user_id")
    23. << std::setw(20) << std::right << rs.Get<ostring>("created") << std::endl;
    24. }
    25. //std::cout << "=> Total fetched rows : " << rs.GetCount() << std::endl;
    26. cout << "执行语句:\r\nselect * from all_users order by user_id\r\n查询到 "
    27. << rs.GetCount() << " 条数据" << endl;
    28. }
    29. catch (std::exception &ex)
    30. {
    31. std::cout << ex.what() << std::endl;
    32. }
    33. Environment::Cleanup();
    34. return 0;
    35. }

C++使用ocilib访问oracle数据库的更多相关文章

  1. .net(C#)访问Oracle数据库的几种免安装组件的对比

    Oracle 数据存取组件(ODAC) 库为Borland Delphi,C++ Builder 以及 Kylix提供了一些非可视化的组件.它们用来存取Oracle关系数据库系统.与BDE类似, OD ...

  2. 基于OCILIB的oracle数据库操作总结及自动生成Model和Dao的工具

    基于OCILIB的oracle数据库操作总结 1.       类图 2.       基类BaseOCIDao的设计与实现 BaseOCIDao.h头文件 #pragma once /* ----- ...

  3. 用JDBC访问ORACLE数据库 关于commit 增快效率 大数据 等的整理

    1.问:用JDBC访问ORACLE数据库,做DELETE操作,能用JAVA多线程实现吗? ORACLE服务器要怎么配?(以下答案来自网络,仅供参考) 答: Oracle有自己的锁机制.就算你开100条 ...

  4. .net(C#)访问Oracle数据库的几种免安装组件的对比(转)

    原文地址 [内容为转载,个人推荐还是用官方的组件,推荐使用 Oracle.DataAccess.dll ] .net(C#)编程过程中,使用到了以下三种免安装的Oracle访问组件,能够不安装Orac ...

  5. 运行于64操作系统上的C#客户端通过WCF访问Oracle数据库不兼容问题

    运行平台: Windows 7  64位操作系统 运行环境: IIS 7 编程语言:C# 数据库: 32位的Oracle 10g 运行原因:64位操作系统C#客户端程序通过WCF访问ORACLE数据库 ...

  6. ODP.NET 之访问 Oracle 数据库

    ODP.NET 之访问 Oracle 数据库 要相使用 Oracle Data Provider For .NET(ODP.NET), 必须先安装 ODP.NET 或者是 ODAC(Oracle Da ...

  7. 【方法】如何限定IP访问Oracle数据库

    [方法]如何限定IP访问Oracle数据库 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知 ...

  8. c#访问oracle数据库

    想在c#中访问oracle数据库,毕竟是开发,想要轻量级访问oracle,客户机上无需安装oracle环境就能正常运行程序. 在网上找了相关资料,只需要引用一个dll即可实现. 访问代码(需引用dll ...

  9. WebService访问oracle数据库本地调试

    WebService访问oracle数据库本地调试-一步一个坑 上篇文章提到我们额数据库挂了,重装了数据库,然后呢我需要在本地调试WebService,看看那些数据结构缺失,迁移到新数据库中去.踩坑之 ...

随机推荐

  1. FPGA视频拼接器的DP 的4k 功能输入, 把lvds 转为 serdes

    4k(3840 x 2160 @60hz)越来越成为一种视频趋势,怎样把4K 接入到拼接器中.是一个棘手的问题. 先看一下原理图的接口: 这是 anx1122的 lvds的接口. 以下看一下系统的框架 ...

  2. API密钥

    什么是API密钥? 答:在api调用时,用来按照指定规则对您的请求参数进行签名,服务器收到你的请求时会进行签名验证,即可以界定你的身份也可以防止其他人通过某种手段恶意篡改你的请求数据. 密钥的使用? ...

  3. Loadrunner脚本编程(2)-VuGen脚本文件的开发过程

    http://www.360doc.com/content/10/0806/13/1698198_44076570.shtml 1.定义测试项目的目标,环境,脚本,测试数据,硬件等.脚本应该符合编码规 ...

  4. PHP微信公众平台

    微信公众平台客户中心微信公众平台开发文档微信公众平台自定义菜单微信公众平台开发(一) 配置接口微信公众平台开发(二) 微信公众平台示例代码分析微信公众平台开发(三) 订阅事件(subscribe)处理 ...

  5. nnCron LITE

    nnCron LITE is a small, but full-featured scheduler that can start applications and open documents a ...

  6. TP3.2之引入第三方类库文件和普通.php文件

    1.引入第三方类库 .class.php文件 1.1 类库有写namespace命名空间 namespace Org\Util; class Auth { } 保存到ThinkPHP/Library/ ...

  7. PHP读取大文件的几种方法

    场景:PHP读取超大文件,例如1G的日志文件,我这里使用的是400M的access.log文件 1.使用file直接读取 <?php $starttime=microtime_float(); ...

  8. [转载]SVN权限设置具体实例

    原文地址:SVN权限设置具体实例作者:白菜豆腐 1   背景假设 厦门央瞬公司是一家电子元器件设备供应商,其中有个ARM部门,专门负责ARM芯片的方案设计.销售,并在北京.上海各设立了一个办事处.对于 ...

  9. HDUOJ-----2824The Euler function

    The Euler function Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  10. O(n)复杂度求没有出现的数字(leetcode448)

    一个长度为N的数组,其中元素取值为1-N,求这个数组中没有出现的.1-N之间的数字. 要求无额外空间,O(n)时间复杂度. nums[i]=-1表示i数字已经出现过了 class Solution(o ...