linux_occi连接oracle数据库前的配置和程序示例_oracle数据库连接实例

2020-02-27 其他范文 下载本文

linux_occi连接oracle数据库前的配置和程序示例由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“oracle数据库连接实例”。

Linux 下occi编程问题总结: 操作系统linux centOS4.5 数据库

Oracle10g Release 10.2.0.1.0 1)首先在oracle管网下载:

oracle-instantclient-basic-10.2.0.3-1.i386.rpm oracle-instantclient-devel-10.2.0.3-1.i386.rpm 使用root用户进入linux将上面的basic和devel放入在/root/oracle10g_package/oracle_occipk目录下

执行rpm –ivh * 进行安装,安装好的文件被生成到目录下: /usr/lib/oracle/10.2.0.3/client/lib 存放库文件 其中libclntsh.so 是oracle提供给c语言调用的动态库 /usr/include/oracle/10.2.0.3/client 存放occi头文件

2)将/usr/include/oracle/10.2.0.3/client 存放occi头文件copy到/usr/include目录下

先查看

[root@mylinux /]# ldd which /u01/oracle/bin/sysresv which: ldd:./which: No such file or directory /u01/oracle/bin/sysresv:

libclntsh.so.10.1 => /usr/lib/oracle/10.2.0.3/client/lib/libclntsh.so.10.1(0x00b46000)

libnnz10.so => /usr/lib/oracle/10.2.0.3/client/lib/libnnz10.so(0x0021d000)

libdl.so.2 => /lib/libdl.so.2(0x00111000)

libm.so.6 => /lib/tls/libm.so.6(0x00115000)

libpthread.so.0 => /lib/tls/libpthread.so.0(0x00138000)

libnsl.so.1 => /lib/libnsl.so.1(0x001b6000)

libc.so.6 => /lib/tls/libc.so.6(0x00423000)

/lib/ld-linux.so.2(0x00b2e000)libclntsh.so.10.1 => 是否存在,不存在要在 $ vi etc/ld.so.conf中增加一行/usr/lib/oracle/10.2.0.3/client/lib 然后执行ldconfig命令使etc/ld.so.conf生效.再次使用

$ ldd which /u01/oracle/bin/sysresv 查看

libclntsh.so.10.1 => /usr/lib/oracle/10.2.0.3/client/lib/libclntsh.so.10.1(0x00b46000)3)编写测试代码:connclient.cpp #include

#include

#include

#include

using namespace oracle::occi;using namespace std;

int main(){ Environment *env;Connection *conn;Statement *stmt;ResultSet *rset;

string struser=“system”;string strpwd=“oracle”;string strconn_string=“ori”;// oracle的SID env = Environment::createEnvironment(Environment::OBJECT);conn = env->createConnection(struser,strpwd,strconn_string);if(NULL!= conn)

cout

cout

string strsql=“select id,name from table1”;stmt=conn->createStatement();stmt->setSQL(strsql);try{ rset=stmt->executeQuery();while(rset->next()){

int id=rset->getInt(1);

string strname=rset->getString(2);

cout

rset=NULL;

cout

stmt->closeResultSet(rset);conn->terminateStatement(stmt);env->terminateConnection(conn);Environment::terminateEnvironment(env);return 0;} 4)编译程序connclient.cpp

这里g++有几个参数说明下: -o:要生成的目标文件或可执行文件

-I:用#include“file”的时候,gcc/g++会先在当前目录查找你所制定的头文件,如果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,他回先在你所制定的目录查找,然后再按常规的顺序去找.。对于#include,gcc/g++会到-I制定的目录查找,查找不到,然后将到系统的缺省的头文件目录查找。-L 查找你指定的库文件路径 增加libocci.so和libclntsh.so指定编译-lclntsh这是连接oracle的动态库

-locci 连接libocci.so文件 使用g++编译时出现错误:

g++-o conncl connclient.cpp-I/usr/include-L/usr/lib/oracle/10.2.0.3/client/lib 命令执行后出现

/tmp/cckQbf4h.o(.text+0x24e): In function `main'::undefined reference to `oracle::occi::Environment::createEnvironment(oracle::occi::Environment::Mode, void*, void*(*)(void*, unsigned int), void*(*)(void*, void*, unsigned int), void(*)(void*, void*))' /tmp/cckQbf4h.o(.text+0x743): In function `main':: undefined reference to`oracle::occi::Environment::terminateEnvironment(oracle::occi::Environment*)' /tmp/cckQbf4h.o(.gcc_except_table+0xa4): undefined reference to `typeinfo for oracle::occi::SQLException' collect2: ld returned 1 exit status 上面是找不到动态函数库,需要命令行参数中增加-lclntsh –locci g++-o conncl connclient.cpp-I/usr/include-L/usr/lib/oracle/10.2.0.3/client/lib-lclntsh –locci 执行语句再次编译,出现

/usr/bin/ld: warning: libstdc++.so.5, needed by /usr/lib/oracle/10.2.0.3/client/lib/libocci.so, may conflict with libstdc++.so.6

OCCI库在linux编译的时候,由于linux版本太高,会提示以上情况,实际上,在大多数linux系统上,还保留有libstdc++5的库。修改命令参数

g++-o conncl connclient.cpp-I/usr/include-L/usr/lib/oracle/10.2.0.3/client/lib-lclntsh-locci /usr/lib/libstdc++.so.5

编译通过。执行程序

./conncl

《linux_occi连接oracle数据库前的配置和程序示例.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
linux_occi连接oracle数据库前的配置和程序示例
点击下载文档
相关专题 oracle数据库连接实例 示例 数据库 程序 oracle数据库连接实例 示例 数据库 程序
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文