Windows以及Linux下用OCCI访问Oracle数据库

来源:互联网 发布:非理性繁荣 知乎 编辑:程序博客网 时间:2024/05/17 18:49
一、Windows 下用OCCI连接Oracle数据库
    1、说明
        在Windows下用OCCI连接Oracle相对方便一些,因为Windows下对DLL的搜索相对灵活一些,可以很方便的加载Oracle OCCI的动态库。
    2、文件准备
        首先,理论上说,我们仅需要头文件、lib文件、dll文件即可正常访问数据库,实际也确实如此。实际开发时,数据库往往不在本机,而本机又没有安装Oracle数据客户端,此时仅需下载Oracle的 即时客户端(instant-client)即可。
        下载地址:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html 下载相对应的版本即可。我这边下载的是 Instant Client for Microsoft Windows (32-bit) 下的 instantclient-basic-nt-12.1.0.2.0.zip 和 instantclient-sdk-nt-12.1.0.2.0.zip ,basic里边是动态链接库等,sdk里边包含头文件和lib文件。
        下载之后,把这两个文件夹解压缩到C盘根目录即可。
    3、建立工程
        ①这里为了方便,先介绍一种不需要配置各种环境变量的方法。
        将如下文件或文件夹拷贝到你建立的工程根(如果是vs,则是xxx.vcxproj所在的目录)目录下
            C:\instantclient_12_1\sdk\include 文件夹
            C:\instantclient_12_1\sdk\lib 文件夹
            C:\instantclient_12_1\vc10\oraocci12.dll 、oraocci12d.dll (这里要对应你的IDE版本,我使用的是VS2010,故拷贝vc10文件夹下的文件)
            C:\instantclient_12_1\oraociei12.dll
            C:\instantclient_12_1\oraons.dll
        将include 和 lib 添加到相应工程目录中,编译调试如下代码
            main.cpp  
        ②既然有简单的,当然也会有相对麻烦一些的方法。那就是include和lib以及dll文件一个都不拷贝,添加ORACLE_HOME环境变量,值C:\instantclient_12_1,在工程中通过环境变量添加include、lib,同时要将 %ORACLE_HOME%\vc10\以及%ORACLE_HOME%添加进在PATH的末尾,用分号“;”分隔。
        如果是第一次调试OCCI,还是建议你拷贝文件。环境变量改起来相对麻烦。
    4、重点
        这里重点介绍一下连接数据部分的细节。连接数据库方法createConnection有多种写法。常用的写法是:
            createConnection(userName, password, connectString);
        其中前两个参数不解释,connectString有两种写法。你可以写如下方式:
            "//192.168.1.xx:1521/xxx"        其中 xxx 是数据库实例名
        这种写法一般写好了就能调试运行。还有一种写法:
            ORA10        这是tnsnames.ora中的描述串的名称,如下:
                ORA10 =
                    (DESCRIPTION =
                        (ADDRESS_LIST =
                            (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))
                        )
                        (CONNECT_DATA =
                            (SERVICE_NAME = orcl)
                        )
                    )
        该文件在目录 C:\instantclient_12_1\network\admin 下。如果没有,需要建立相应的文件夹和文件。有了这个文件,以及环境变量ORACLE_HOME,就可以将connectString写成“ORA10”了。OCCI会从%ORACLE_HOME%\network\admin\下找到.ora文件,然后根据ORA10去寻找相应的连接信息。这种方式略麻烦。
    5、可能遇到的错误
        32104、32101 :dll路径有问题或者没有拷贝完全。
        TNS:protocol adapter error : 描述符文件有问题。用cmd执行 cd %ORACLE_HOME%\network\admin\ ,看打开的路径下是否有.ora文件。

二、Linux 下用OCCI连接Oracle数据库
    Linux下使用与Windows下使用没有什么本质的区别,只是由于Linux对动态链接库(so文件)的查找方式与Windows不同,不能简单的将so文件放到执行目录下。可以参考文章:http://blog.csdn.net/cjqpker/article/details/41550527 
    我是这么做的    
    1、下载的文件是 instantclient-sdk-linux-12.1.0.2.0.zip 和 instantclient-basic-linux-12.1.0.2.0.zip,解压出的 instantclient_12_1文件夹如下放置:     
                /usr/lib/oracle/client/instantclient_12_1     然后切换到如上目录,建立文件链接(解决版本问题):
                ln -s libocci.so.12.1 libocci.so
                ln -s libclntsh.so.12.1 libclntsh.so
    2、增加如下文件
                /etc/ld.so.conf.d/ora.conf        文件内容只有一行: /usr/lib/oracle/client/instantclient_12_1/
            控制台执行命令 ldconfig
    3、用在Windows中使用的main.cpp参与编译连接:
            g++ -o main main.cpp -I /usr/lib/oracle/client/instantclient_12_1/sdk/include -L/usr/lib/oracle/client/instantclient_12_1 -locci -lclntsh
            解释:    -o main 表示输出名称为 main
                           -I /usr/lib/oracle/client/instantclient_12_1/sdk/include 表示代码中的#include 语句可以从该目录中查找头文件
                           -L/usr/lib/oracle/client/instantclient_12_1 -locci -lclntsh 表示使用 libocci.so libclntsh.so 参与链接,文件从-L后边跟着的目录中寻找
    4、如果编译成功,则可以运行其,查看结果。
    5、注意点
            如果执行这里边的步骤时报权限错误,那说明你不是用root用户登陆的。解决办法是 命令前加 sudo,回车后输入当前用户密码执行

0 0
原创粉丝点击