c 连接oracle 11,Linux下c+使用occi连接oracle11.2数据库

2a4e143650088a87aa1e462f941a1a77.png

linux下c/c++连接oracle可以使用oci、occi、Pro*C/C++几种方法

oci

Oracle Call Interface (OCI) 是 Oracle Database 的全面、高性能、原生 C 语言接口,可用于开发自定义或打包数据库应用。OCI 具有高可靠性。SQL*Plus、Real Application Testing (RAT)、SQL*Loader 和 Data-Pump 等 Oracle 工具都使用 OCI。OCI 为其他语言特定接口提供了基础,例如 Oracle JDBC-OCI、Oracle Data Provider for Net (ODP.Net)、Oracle Precompilers、Oracle ODBC 和 Oracle C++ Call Interface (OCCI) 驱动程序都基于 OCI 构建。OCI 还被一些主要的脚本语言驱动程序所使用,例如用于 Node.js 的 node-oracledb、PHP OCI8、ruby-oci8、Perl DBD::Oracle、Python cx_Oracle 以及统计编程语言 R 的 ROracle 驱动程序。,

occi

OCCI 基于标准 C++ 和面向对象的模式,旨在提高 Oracle 数据库应用的开发效率和质量。OCCI 正在成功地用于客户端-服务器架构、中间层和复杂对象建模应用。OCCI 是访问 Oracle 关系对象特性(如对象类型、继承、关系和集合)的自然接口。对象在 OCCI 中表示为 C++ 类实例,从而实现应用和数据库之间的无缝集成。具有客户端对象缓存的导航访问方法提供了全面的数据库透明性。

Pro*C/C++

Oracle Pro*C/C++预编译器允许您在应用程序中使用 SQL 的电源和灵活性。方便、易用的界面可让您的应用程序直接访问 Oracle。与许多应用程序开发工具不同,Pro*C/C++允许您创建高度自定义的应用程序。例如,您可以创建包含最新窗口和鼠标技术的用户界面。您还可以创建在后台运行的应用程序,而无需用户交互。pro*c/c++是嵌入到c/c++里面的方式。需要先把proc文件转换成c/c++语法后,再用c/c++编译。(https://docs.oracle.com/cd/E11882_01/appdev.112/e10825/toc.htm)

本文主要介绍c/c++通过occi操作oracle数据库。

安装 linux下的oracle客户端

rpm 安装文件,将以下四个文件拷至 linux中, 下载网址:https://www.oracle.com/technetwork/cn/database/occidownloads-083553-zhs.html

oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm

oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm

oracle-instantclient11.2-odbc-11.2.0.3.0-1.x86_64.rpm

oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.x86_64.rpm

使用命令安装:rpm -ivh *.rpm

成功之后,出现以下文件:

2f7641864b62db2e74b16885642e2934.png

注:如果没有上面指明的路径,则需要重装安装,使用命令: rpm -ivh --force *.rpm

tnsnames.ora文件

手动添加tnsnames.ora文件

/usr/lib/oracle/11.2/client64/ 下,创建文件 ./network/admin/tnsnames.ora

tnsnames.ora:

58713bade813710b57c00f80be46ce61.png

注: ip和端口按各数据库参数而定

测试程序

在一个目录下,新建his.cpp文件,文件内容如下:

#include

#define LINUXOCCI

#include

using namespace std;

using namespace oracle::occi;

int main(){

Environment *env = Environment::createEnvironment(Environment::DEFAULT);

cout

string name = "build";

string pwd = "123456";

string sid = "90.0.10.140/orcl";// 此处根据各个数据库参数而定

string date;

try {

Connection *conn = env->createConnection(name, pwd, sid);

if(conn)

cout

else

cout

Statement *stmt = conn->createStatement();

string sSQL = "select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual";

stmt->setSQL(sSQL);

ResultSet *rs = stmt->executeQuery();

if(rs->next())

{

date = rs->getString(1);

}

cout

env->terminateConnection(conn);

} catch(SQLException e) {

cout

return -1;

}

Environment::terminateEnvironment(env);

cout

return 0;

}

环境变量配置

1.手动在linux 中执行,但是重启后就无效了;先测试环境可先这样执行

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 NLS_LANG=AMERICAN_AMERICA.UTF8

export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib:/$LD_LIBRARY_PATH

export ORACLE_SID=orcl

(一定要加 NLS_LANG的变量,字符集要和数据库相同,否则实际操作数据库的时候很可能处理不了)

2.若要使重启仍生效,需更改文件 bashrc,添加下面加粗部分并保存

vi ~/.bashrc

# .bashrc

# Source global definitions

export ORACLE_HOME=/usr/lib/oracle/11.2/client64

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib

export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/include/oracle/11.2/client64/

export NLS_LANG=AMERICAN_AMERICA.UTF8

export PATH=$PATH:/sbin:/usr/sbin:$ORACLE_HOME/bin

if [ -f /etc/bashrc ]; then

. /etc/bashrc

fi

# User specific aliases and functions

编译脚本

使用下列命令编译出测试程序,编译无误后,可以运行程序查看结果

g++ his.cpp -o his -I/usr/include/oracle/11.2/client64/ -L/usr/lib/oracle/11.2/client64/lib -locci -lnnz11 -lclntsh

编译完,在编译目录下直接执行./his 可以查看结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值