1. 所需安装包 (64 位 )
oracle-instantclient-basic-10.2.0.3-1.x86_64.rpm
oracle-instantclient-devel-10.2.0.3-1.x86_64.rpm
2. 安装
安装后,库文件路径为 /usr/lib/oracle/10.2.0.3/client64/lib/
头文件路径为 /usr/include/oracle/10.2.0.3/client64/
3. 测试程序
connclient.cpp
#include <iostream> #include <stdio.h> #include <occi.h> using namespace oracle::occi int main() { Environment *env; Connection *conn; Statement *stmt; //连接 string struser( “user” ); string strpwd( “password” ); string strconn_string( “168.1.1.2:1521/sid” ); env = Environment::createEnvironment(Environment::OBJECT); conn = env->createConnection(struser, strpwd, strconn_string); if( NULL != conn ) cout<<”conn success”<<endl; else cout<<”conn failed”<<endl; //执行sql,返回结果并显示 string strsql( “select id name from table1” ); stmt = conn->createStatement( strsql ); ResultSet *rset = stmt-> executeQuery(); while( rset->next() ) { int id = rset->getInt(1); string strname = rset->getString(2); cout<<”id==”<<id<<”name==”<<name<<endl; } //关闭 stmt->closeResultSet(rset); conn->terminateStatement(stmt); env->terminateConnection(conn); Environment::terminateEnvironment(env); return 0; }
4. 编译
g++ -o connclient connclient.cpp -L /usr/lib/oracle/10.2.0.3/client64/lib
编译出现的问题
1) error: occi.h: No such file or directory
解决:编译时没有引入 OCCI 头文件
g++ -o connclient connclient.cpp -L /usr/lib/oracle/10.2.0.3/client64/lib -I/ usr/include/oracle/10.2.0.3/client64
2) 找不到对应函数
undefined reference to `oracle::occi::Environment::createEnvironment(oracle::occi::Environment::Mode, void*, void* (*)(void*, unsigned int), void* (*)(void*, void*, unsigned int), void (*)(void*, void*))'
解决:编译时引入库
g++ -o connclient connclient.cpp -L /usr/lib/oracle/10.2.0.3/client64/lib -I/ usr/include/oracle/10.2.0.3/client64 -locci –lclntsh
3) 找不到库,如 libstdc++.so.5
解决: OCCI 库在 linux 编译的时候,由于 linux 版本太高,可能没有 libstdc++.so.5 库,下载这个版本的库,即可,下载完可能会提示和 libstdc++.so.6 冲突,编译时加上即可
g++ -o connclient connclient.cpp -L /usr/lib/oracle/10.2.0.3/client64/lib -I/ usr/include/oracle/10.2.0.3/client64 -locci –lclntsh /usr/lib/libstdc++.so.5
5. 执行
./connclient
输出结果:
1 name1
2 name2