Linux 环境下调用C++库ocilib操作Oracle数据

来源:互联网 发布:美瞳推荐知乎 编辑:程序博客网 时间:2024/05/22 02:18
第一、下载ocilib源码库:
https://github.com/vrogier/ocilib/releases/

第二、配置ORACLE环境
1、到Oracle官网下载如下文件
oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm
oracle-instantclient11.2-odbc-11.2.0.3.0-1.x86_64.rpm
oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.x86_64.rpm

2、安装
rpm -ivh *.rpm
安装完成后,查看/usr/lib/oracle/11.2/client64,有bin和lib两个目录
头文件在/usr/include/oracle/11.2/client64

3、设置ORACLE_HOME环境变量
设置ORACLE_HOME=/usr/lib/oracle/11.2/client64/

测试Oracle环境是否配置成功
在/usr/lib/oracle/11.2/client64/bin目录下执行sqlplus命令
./sqlplus reader/reader@172.16.8.200:1521/upapp
可能会报错,这是因为这个可执行程序依赖一些库,可以通过设置LD_LIBRARY_PATH环境变量来解决,登陆成功说明Oracle环境配置完成。quit命令退出sqlplus终端。

第三、修改ocilib的configure文件
前面的步骤完成后,进入到ocilib目录,执行./configure,会报错,提示找不到头文件路径,修改configure文件,直接给变量ac_headers_path赋值为前面步骤说到的头文件路径/usr/include/oracle/11.2/client64

第四、编译ocilib
./configure CFLAGS="-O2 -m64"(CFLAGS参数很重要,表示编译为64位)
make
make install

第五、调用ocilib库,生成c++客户端
这部分没有特殊操作,只要注意在Makefile文件中设置好-L和-I即可

第六、运行c++程序访问Oracle数据库
跟编译ocilib库一样,也需要配置好Oracle环境。运行程序之前注意配置LD_LIBRARY_PATH即可。如果遇到“cannot create oci environment”异常,多半是因为库没有链接对。

FAQ:
1、在启动sqlplus或者自己开发的调用oci库的程序的时候会报ORA-21561: OID generation failed错误
原因:这是因为本机的hostname和/etc/hosts文件中与127.0.0.1对应的主机名不一致。
解决方法:
(1)修改/etc/hosts,将本机的hostname加到该文件中;
(2)用hostname命令修改本机hostname,修改为与127.0.0.1对应的主机名一致即可。

2、通过sqlplus或者c++程序连接数据库,中文字符乱码。
原因:系统的字符集与oracle数据库的字符集不一致。
解决方法:需要设置NLS_LANG环境变量
(1)通过sqlplus终端执行命令:
select * from nls_database_parameters;
查看如下三个域的值,如下:
NLS_LANGUAGE                   AMERICAN
NLS_TERRITORY                  AMERICA
NLS_CHARACTERSET               UTF8
(2)设置NLS_LANG环境变量的值为:AMERICAN_AMERICA.AL32UTF8
PS:在taf平台,如果修改了环境变量需要重启tafnode,否则环境变量不会在taf中生效。

原创粉丝点击