• C++使用ocilib访问oracle数据库


    引用: 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-windowsocilibproj est中)可以测试是否能连上服务器的数据库
        运行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=..ociliblib32
    (工程|属性|C/C++|常规)附加包含目录:..ocilibinclude
    (工程|属性|连接器)附加库目录:..ociliblib32

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

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

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

    三、程序展示

    [cpp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
      1. #include <string>  
      2. #include <iostream>  
      3. #include <iomanip>  
      4.   
      5. #include "ocilib.hpp"  
      6.   
      7.   
      8.   
      9. #pragma comment(lib, "..\ocilib\lib32\ociliba.lib")  
      10.   
      11. int main()  
      12. {  
      13.     using namespace ocilib;  
      14.     using namespace std;  
      15.   
      16.     //当前程序路径  
      17.     string szlibpath = "E:\shuaizy\Trunk\oracletest\Debug";  
      18.   
      19.     try  
      20.     {  
      21.         Environment::Initialize(Environment::Default, szlibpath);  
      22.         Connection con("192.168.2.201/orcl", "test", "qiantangjiang");//实例、用户名、密码  
      23.         Statement st(con);  
      24.         st.Execute("select * from all_users order by user_id");  
      25.         Resultset rs = st.GetResultset();  
      26.         while (rs++)  
      27.         {  
      28.             std::cout << std::setw(30) << std::left << rs.Get<ostring>("username")  
      29.             << std::setw(10) << std::right << rs.Get<ostring>("user_id")  
      30.             << std::setw(20) << std::right << rs.Get<ostring>("created") << std::endl;  
      31.         }  
      32.         //std::cout << "=> Total fetched rows : " << rs.GetCount() << std::endl;  
      33.         cout << "执行语句: select * from all_users order by user_id 查询到 "   
      34.             << rs.GetCount() << " 条数据" << endl;  
      35.     }  
      36.     catch (std::exception &ex)  
      37.     {  
      38.         std::cout << ex.what() << std::endl;  
      39.     }  
      40.     Environment::Cleanup();  
      41.     return 0;  
      42. }  
  • 相关阅读:
    使用Python通过docker api控制docker容器
    windows 编译 google v8
    Kali下Metasploit自动连接postgresql
    更新Kali中的metasploit
    spring + mybatis 注解式事务不回滚的原因分析 @Transactional
    ListView中使用type需要注意的东西 java.lang.ArrayIndexOutOfBoundsException: length=2; index=2 addScrapView
    Missing artifact com.sun:tools:jar:1.5.0的解决方案
    0919-The Standard of Code Review
    重定向URL乱码问题
    hive学习_01
  • 原文地址:https://www.cnblogs.com/jiftle/p/6544591.html
Copyright © 2020-2023  润新知