linux下c++使用occi连接oracle数据库步骤,及出现的问题和解决

    技术2022-05-19  28

    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


    最新回复(0)