linux c oci 配置环境 编程 详解

    最近在做linux下的c与oralce的操作。为了直接操作oracle数据的内核,是存取的更快,我选择了OCI——oracle提供的c语言接口,来作为开发的工具。

    首先我先查了很多关于OCI提供的函数资料,这些资料如果你有需要联系我,我会发到你的邮箱里:yzzhang.gw.con@163.com这是我的邮箱;

   下面我先说一下在linux用c去操作oracle需要什么样的环境;

  a;oralce的客户端是必须的,

  b;oracle的sdk也是必须的;

  以上两个软件你可以到这个网站去下载:http://www.oracle.com/technology/software/tech/oci/instantclient/index.html

 

  我在的rpm版本的,这样的话,省去了很多的配置环境的过程。

  安装指令: rpm -ivh 你下载的rpm包的名称(要全称)

  安装完以后,在编一个简单的测试代码(这个我就不提供了);

  最后就是最主要的编译了:gcc

  就是这个gcc用去了我2天的时间,其中的参数,令我很头疼,不过,终于搞定:

  gcc指令:gcc -o t -I/usr/include/oracle/10.2.0.4/client -L/usr/lib/oracle/10.2.0.4/client/lib -lclntsh OCITest.c

                              (同文件的路径)                                   (动态库的路径)

 如果,你是默认装,完全可以用我提供的指令。如果你指定了路径,那就必须把路径修改;

 这样的话,你完全可以编译成功。我很高兴,终于编译成功了,但是,令我头疼的还在后面呢。

 我执行程序,出现了错误:error while loading shared libraries: libclntsh.so.10.1: cannot open shared object file: No such file or directory

 我初步分析是动态库的问题,花了2个小时,查查了动态库的有关资料。才知道linux下有一个/ect/ld.so.conf的文件,这个文件是存储动态库路径的。你必须把路径加入到这个文件中:echo "/usr/lib/oracle/10.2.0.4/client/lib ">>/etc/ld.so.conf

 加入完之后,本以为可以执行了,但是还出现错误,在查查了资料,原来还得提交。

  执行:/sbin/ldconfig

  还需要在usr/lib/oracle/10.2.0.4/client 下建立network,然后在network下建立admin,在admin下建立tnsnames.ora,其中tnsnames.ora要修改权限,在root用户下把器改为所有用户的都能执行。chmod 777 tnsnames.ora

  内容如下: 192.168.1.201 =  //名字任意,对应于OCIServerAttach(srvhp,p_err,(text *)"192.168.1.201..)第三个参数
   (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.201)(PORT = 1521))
     (CONNECT_DATA =
       (SERVER = DEDICATED)
       (SERVICE_NAME = orcl)
      )
    )

  到此,程序完全可以运行,两天的劳动没有白费,希望写出来,能给跟我遇到同样问题的人一点点的提示。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
oci函数的详细介绍 和应用实例 OCI 连接过程比较复杂,除了分配设置各个基本句柄外,还要明确彼此之间的联系,大致流程如下: 创建环境句柄: OCIEnvCreate(&envhp;, …); 创建一个指定环境的错误句柄: OCIHandleAlloc((dvoid *)envhp, (dvoid **)&errhp;,…); 创建一个指定环境的服务器句柄: OCIHandleAlloc((dvoid *)envhp, (dvoid **)&servhp;,…); 建立到数据源的访问路径 : OCIServerAttach(servhpp, errhpp,…); 创建一个指定环境的服务上下文句柄: (void) OCIHandleAlloc((dvoid *)envhpp,…); 为指定的句柄及描述符设置特定的属性: (void) OCIAttrSet((dvoid *)svchpp,…); 创建一个指定环境的用户连接句柄: (void) OCIHandleAlloc((dvoid *)envhpp,…); 为用户连接句柄设置登录名及密码: (void) OCIAttrSet((dvoid *)usrhpp,…); 认证用户建立一个会话连接: OCISessionBegin(svchpp, errhpp,…); 创建一个句子句柄: OCIHandleAlloc((dvoid *)envhpp,…);s 准备 SQL 语句: OCIStmtPrepare(stmthpp, errhpp,…); 绑定输入变量: OCIBindByPos(stmtp &hBind;, errhp,…); 绑定输出变量: OCIDefineByPos(stmthpp, &bhp1;, errhpp,…); 获得 SQL 语句类型: OCIAttrGet ((dvoid *)stmthpp, (ub4)OCI_HTYPE_STMT,…); 执行 SQL 语句: OCIStmtExecute(svchpp, stmthpp,…); 释放一个会话: OCISessionEnd(); 删除到数据源的访问 : OCIServerDetach(servhpp, errhpp, OCI_DEFAULT); 释放句柄: OCIHandleFree((dvoid *) stmthpp, OCI_HTYPE_STMT);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值