操作环境
操作系统内核:CentOS Linux release 7.6.1810(可通过命令cat /etc/redhat-release
查看)
操作系统位数:64位(可通过命令uname -p
查看)
数据库版本:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production(可通过SQL语句select * from v$version;
查看)
操作过程
1.下载软件包
在Oracle下载如下四个文件,这里的rpm包的版本应当与Oracle数据库的版本相对应(比如我这里都是11.2),rpm包的位数应当与操作系统的位数相对应(比如我这里都是x86-64)。
2.安装软件包
下载后在rpm文件所在路径下执行命令rpm -ivh *.rpm
进行安装,如果是Ubuntu等Debian系的Linux则需要借助alien将rpm文件转换为deb文件后通过dpkg安装。
如果安装成功,下面三个目录及文件应当会被导入(不同版本会略有不同),如果文件发生大量缺失可能是安装失败,建议通过命令rpm -e [软件包名称(不带rpm后缀)]
卸载后重新安装而不是强制安装。
[root@localhost ~]# ls /usr/lib/oracle/11.2/client64/bin/
adrci genezi sqlplus
[root@localhost ~]# ls /usr/lib/oracle/11.2/client64/lib/
glogin.sql libclntsh.so.11.1 libocci.so libociei.so libsqlplusic.so libsqora.so.11.1 ojdbc6.jar xstreams.jar
libclntsh.so libnnz11.so libocci.so.11.1 libocijdbc11.so libsqlplus.so ojdbc5.jar ottclasses.zip
[root@localhost ~]# ls /usr/include/oracle/11.2/client64/
ldap.h occiAQ.h occiData.h oci1.h ociapr.h ocidfn.h ocikpr.h odci.h ori.h ort.h
nzerror.h occiCommon.h occi.h oci8dp.h ocidef.h ociextp.h ocixmldb.h oratypes.h orl.h xa.h
nzt.h occiControl.h occiObjects.h ociap.h ocidem.h oci.h ocixstream.h orid.h oro.h
[root@localhost ~]#
3.修改环境变量
在~/.bash_profile
中添加以下内容后执行命令source ~/.bash_profile
使配置生效,添加后可通过export
命令查看是否修改成功。
# --- OCCI begin ---
# 添加头文件搜索路径
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/include/oracle/11.2/client64/
# 添加静态链接库搜索路径
export LIBRARY_PATH=$LIBRARY_PATH:/usr/lib/oracle/11.2/client64/lib/
# 添加动态链接库搜索路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/oracle/11.2/client64/lib/
# 添加字符编码以避免中文乱码
export NLS_LANG=AMERICAN_AMERICA.UTF8
# --- OCCI end ---
4.执行测试程序
编译并执行以下代码,如果执行成功则表示数据库连接成功,其中数据库名称可通过SQL语句select instance_name from V$instance;
获取。
#include <iostream>
#include <stdio.h>
#include <occi.h>
using namespace std;
using namespace oracle::occi;
int main() {
Environment *env = Environment::createEnvironment();
string name = "用户名";
string pass = "密码";
string srvName = "服务器IP地址:Oracle端口/数据库名称";
try {
Connection *conn = env->createConnection(name, pass, srvName);
cout << "connect success" << endl;
env->terminateConnection(conn);
} catch (SQLException e) {
cout << e.what() << endl;
}
Environment::terminateEnvironment(env);
cout << "quit" << endl;
return 0;
}
[root@localhost ~]# g++ main.cpp -o main -I/usr/include/oracle/11.2/client64/ -L/usr/lib/oracle/11.2/client64/lib/ -locci -lnnz11 -lclntsh
[root@localhost ~]# ./main
connect success
quit
[root@localhost ~]#