C++通过OCCI操作Oracle数据库详解

C++使用occi连接oracle数据库 文章目录什么是OCCI?安装和使用下载配项目属性写代码遇到的问题 什么是OCCI? occi就是Oracle C++ Call Interface。 安装和使用 下载 去到oracle的官网,到下载页:https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html 然后网页往下拉,这个对应的sdk包就有相关头文件和使用例子等。 配项目属性 我把对应头文件和lib库放到了我的计算机的这里: (1) 阅读详情

1.安装OCCI

如果oracle数据库默认没有安装OCCI,可以自己从官网上下载与自己数据库版本一致的API,地址:http://www.oracle.com/technetwork/topics/linuxsoft-082809.html  ; 其中包含四个软件包:

?
oracle-instantclient-sqlplus-10.2.0.5-1.i386.rpm
oracle-instantclient-devel-10.2.0.5-1.i386.rpm
oracle-instantclient-odbc-10.2.0.5-1.i386.rpm
oracle-instantclient-basic-10.2.0.5-1.i386.rpm

安装完成之后,会在/usr/lib下多个oracle 共享库文件夹,在/usr/include下多个oracle 头文件(接口)文件夹(可以将他们放到环境变量中)。我的数据库版本是10.2.0,下面以此为例。

2.编写HelloWorld程序测试连接

复制代码
#include <iostream>
#define LINUXOCCI //避免函数重定义错误
#include <occi.h>
using namespace std;
using namespace oracle::occi;
int main()
{
   Environment *env=Environment::createEnvironment(Environment::DEFAULT);
   cout<<"success"<<endl;
   string name = "scott";
   string pass = "tiger";
   string srvName = "127.0.0.1:1522/orcl";
   try
   {
      Connection *conn = env->createConnection(name, pass);
      cout<<"conn success"<<endl;
      env->terminateConnection(conn);
   }
   catch(SQLException e)
   {
      cout<<e.what()<<endl;
       return -1;
   }
   Environment::terminateEnvironment(env);
   cout<<"end!"<<endl;
   return 0;
}
复制代码

编译命令:

?
g++ test.cc -o test -I/usr/include/oracle/10.2.0.5/client -L/usr/lib/oracle/10.2.0.5/client/lib -locci -lsqlplus

我没有将occi的路径加入到环境变量中,所以此处要显示列出目录才能通过编译,找到共享库。

运行./test会报错,libocci.so找不到,解决办法很简单:将/usr/lib/oracle/.../lib下的库加入到LD_LIBRARY_PATH中就可以了。

输出结果:

?
success
conn success
end!

注:这件不幸的事情可能只发生在我身上了,本人系统中有三个用户,其中一个是oracle,而程序是用另一个用户写的,于是编译通过了,但是运行总是报错:

?
ORA-12162: TNS:net service name is incorrectly specified

后来查明,这个是由于没有设置并导出ORACLE_SID。换了oracle用户试试,居然运行通过了,真的很伤心,原来那个用户没有设置Oracle环境变脸怎么能直接本地访问呢。

3.进行一些操作,执行sql语句

Employees.h

复制代码
/*
* A simple OCCI test application
* This file contains the Employees class declaration
*/
 
#include <iostream>
#include <occi.h>
#include <iomanip>
 
using namespace oracle::occi;
using namespace std;

class Employees {
public:
   Employees();
   virtual ~Employees();
 
   void List();

private:
   Environment *env;
   Connection  *con;

   string user;
   string passwd;
   string db;
 };
 
 Employees::Employees()
 {
   /*
 69    * connect to the test database as the HR
 70    * sample user and use the EZCONNECT method
 71    * of specifying the connect string. Be sure
 72    * to adjust for your environment! The format
 73    * of the string is host:port/service_name
 74 */
 
   user = "scott";
   passwd = "tiger";
  db = "127.0.0.1:1522/orcl";
 
   env = Environment::createEnvironment(Environment::DEFAULT);
 
   try
   {
     con = env->createConnection(user, passwd, db);
   }
   catch (SQLException& ex)
   {
     cout << ex.getMessage();
 
     exit(EXIT_FAILURE);
   }
}

 Employees::~Employees()
 {
   env->terminateConnection (con);

   Environment::terminateEnvironment (env);
 }
 
 void Employees::List()
{
  /*
104    * simple test method to select data from
105    * the employees table and display the results
106 */
 
   Statement *stmt = NULL;
   ResultSet *rs = NULL;
   string sql = "select EMPNO, ENAME, JOB " \
                "from EMP order by EMPNO";
 
   try
   {
     stmt = con->createStatement(sql);
   }
  catch (SQLException& ex)
  {
     cout << ex.getMessage();
   }
 
   if (stmt)
   {
     try
     {
      stmt->setPrefetchRowCount(32);

      rs = stmt->executeQuery();
    }
    catch (SQLException& ex)
     {
      cout << ex.getMessage();
    }
 
    if (rs)
    {
      cout << endl << setw(8) << left << "EMPNO"
            << setw(22) << left << "ENAME"
           << setw(27) << left << "JOB"
           << endl;
       cout << setw(8) << left << "======"
            << setw(22) << left << "===================="
            << setw(27) << left << "========================="
           << endl;
 
       while (rs->next()) {
        cout << setw(8) << left << rs->getInt(1)
            << setw(22) << left << (rs->isNull(2) ? "n/a" : rs->getString(2))
              << setw(27) << left << rs->getString(3)
              << endl;
      }

       cout << endl;
       stmt->closeResultSet(rs);
     }
     con->terminateStatement(stmt);
   }
 }
 
复制代码

main.cc

复制代码
 #include "Employees.h"

 using namespace std;
 using namespace oracle::occi;

 int main (void)
 {
   /*
 48    * create an instance of the Employees class,
 49    * invoke the List member, delete the instance,
 50    * and prompt to continue...
 51 */
 
   Employees *pEmployees = new Employees();
 
   pEmployees->List();

   delete pEmployees;
 
   cout << "ENTER to continue...";
 
   cin.get();
 
   return 0;
 }
复制代码

 

运行结果就不说了,反正是oracle里自带的emp表。

 

 

 

ChatGPT Plus账号被降智?3个实用检测方法+终极解决方案(附国内支付指南) 本文针对ChatGPT Plus账号性能下降问题,提供了3个科学检测方法和系统级解决方案。通过详细分析症状、专业诊断技巧和优化策略,帮助用户有效应对GPT-4o等高级功能失效、响应质量下降等问题,特别包含国内用户关心的支付方案和账号管理建议。 阅读详情

相关推荐

MaaS 商业模式全面分析报告:从技术赋能到商业变现的全链条探索

MaaS(模型即服务)商业模式正成为AI产业主流,2024年上半年中国市场规模达2.5亿元,预计2027年占比将提升至47%。该模式通过云服务提供预训练AI模型,大幅降低企业应用AI的技术门槛和成本。核心盈利方式包括按使用量计费、订阅制、定制化服务等,其中混合模式因灵活性成为趋势。MaaS产业链包含模型提供商、云平台、应用开发商和最终用户,重塑了AI产业格局。随着《数据法案》等监管加强,数据增值服务面临更严格合规要求。未来五年,中国MaaS市场增速预计超50%,用户规模将从2025年2.1亿增至2030年5

芯片行业20年 · 参与定义实现千万级量产出货 · AI芯片PM 2889

[C++] 通过OCCI操作Oracle数据库详解

  今日趁空,尝试用C++操作Oracle数据库。大致步骤列举如下: 1.安装OCCI 如果oracle数据库默认没有安装OCCI,可以自己从官网上下载与自己数据库版本一致的API,地址:http://www.oracle.com/technetwork/topics/linuxsoft-082809.html ; 其中包含四个软件包: oracle-instantclient-sql...

weixin_30617737的博客 415

WSL2安装(详细过程)

适用于 Linux 的 windows 子系统允许开发人员直接在 Windows 上运行 GNU/Linux 环境 -- 包括大多数命令行工具、实用程序和应用程序,无需修改,而无需传统虚拟机或dualbot设置的开销。

qq_43636384的博客 3万+

C++连接Oracle之OCCI

环境 IDE 服务器 Windows 10 x64 Visual Studio 2017 oracle 11g 一:首先要下载两个文件 第一个压缩文件是:instantclient-basic-windows.x64。 第二个压缩文件是:instantclient-sdk-windows.x64。 第一个文件是Runtime,也就是程序的运行时库。将来要加到调试路径里去...

博弈星宇 1935

BIOS更新后PIN不可用怎么办?从原理到实操的完整修复指南

在计算机维护中,BIOS更新是常见的固件升级操作,但其引发的登录异常却常让用户措手不及。Windows Hello PIN并非传统密码,它通过TPM芯片与设备启动环境(PCR状态)强绑定,一旦主板固件或安全启动配置改变,TPM便会拒绝释放密钥,导致“由于此设备上的更改,你的PIN不再可用”。理解这一原理后,恢复路径清晰可控:优先尝试密码登录,或通过WinRE替换utilman.exe创建临时管理员,必要时还需处理BitLocker恢复密钥。本文面向系统维护与数据安全场景,系统梳理PIN失效的恢复流程与避坑方

weixin_31364787的博客 355

Maxwell个人初学经验及资料分享

前段时间学习了课题组基于Maxwell所建立的模型,因为以前从来没有使用过,只是按照一步一步记忆了操作,但总觉得不熟悉,我想是缺乏对这个软件整体的了解,真正想上手只会这一个模型也没有办法扩展。但是我感觉这些有限元分析软件学习起来应该有一些共性,基于以前对COMSOL学习的一点经验,我就在官网和其他网站找了一些学习资源构成一条基础入门之路,也可能有更好的资源,仅代表个人观点做一下分享。以上就是本人对该软件初步学习的一点理解,跟着这样的操作不到一个星期就能初步的掌握。...

怎么又是萝卜的博客 5630

C++使用oracle的occi库操作oracle数据库

版权声明:转自http://blog.youkuaiyun.com/dgyanyong/article/details/17144141 // C++使用oracle的occi库操作oracle数据库 //步骤 //1、创建OCCI上下文环境 //2、创建数据库连接 //3、创建Statement对象 //4、执行查询SQL //5、执行插入SQL //6、终止Statement对象

Primeprime的专栏 1184

S32DS新建工程、编译调试下载、导入工程详细介绍

新建了一个工程之后,下面简单介绍下基本的UI界面。其中最左下角那个是界面,这个界面很重要,是图形化配置界面,然后可以根据这些配置自动生成代码。其中,左边那些配置文件,都是系统帮我们创建好了的,我们其实可以直接用就行。有PE工具的调试,以及Jlink工具的调试。我目前使用到PE工具调试可以查看寄存器值,而Jlink调试查看不了寄存器值。连接了开发板之后,点击Debug就可以吧程序下载到芯片上了,而且可以进入到调试界面。

luobeihai的博客 2万+

通过OCCI操作Oracle数据库详解

1.简介     OCCI 即 Oracle C++ Call Interface          在Windows下访问Oracle数据库可以使用ADO,ADO.Net,OLEDB,ODBC,跨平台的OCCI等方法,其中速度最快,对Oracle支持最完整的是Oracle提供的OCCI.       2.安装OCCI SDK   OCCI SDK包含在Oracle客户端中,在如下位置

rznice的专栏 9219

8.26华为OD机试真题 新系统 - 仓库查询 (Java/Py/C/C++/Js/Go)

8.26华为OD机试真题 新系统 - 仓库查询 (Java/Py/C/C++/Js/Go)

算法大师! 1730

半车(前后、左右)、整车悬架详细推导建模和simulink仿真分析

用达朗贝尔定理依据悬架数学模型,得到悬架模型微分方程,分别用simulink建立前后半车、左右半车悬架;结合转向2自由度模型与半车侧倾模型,对模型考虑相干性、延时性的C级随机路面下,仿真分析给定角阶跃输入下的侧倾稳定性。

Mr.邹的博客 1万+

c++访问数据库代码示例 occi_[C++] 通过OCCI操作Oracle数据库详解

今日趁空,尝试用C++操作Oracle数据库。大致步骤列举如下:1.安装OCCI如果oracle数据库默认没有安装OCCI,可以自己从官网上下载与自己数据库版本一致的API,地址:http://www.oracle.com/technetwork/topics/linuxsoft-082809.html ; 其中包含四个软件包:oracle-instantclient-sqlplus-10.2....

weixin_39925098的博客 217

SAP NetWeaver Business Client (NWBC) 的深入解析

SAP NetWeaver Business Client(NWBC)作为 SAP 提供的一种用户界面,旨在为终端用户提供无缝集成传统 SAP GUI 事务和新开发的基于 Web Dynpro ABAP 的应用程序的体验。SAP NetWeaver Business Client(NWBC)是 SAP 推出的用户界面,旨在为终端用户提供单一入口,集成传统的 SAP GUI 事务和新开发的基于 Web Dynpro ABAP 的应用程序。在实际业务场景中,NWBC 的应用提升了用户的工作效率和体验。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1602

c++访问数据库代码示例 occi_C++通过OCCI操作Oracle数据库详解

1.安装OCCI如果oracle数据库默认没有安装OCCI,可以自己从官网上下载与自己数据库版本一致的API,其中包含四个软件包:oracle-instantclient-sqlplus-10.2.0.5-1.i386.rpmoracle-instantclient-devel-10.2.0.5-1.i386.rpmoracle-instantclient-odbc-10.2.0.5-1.i386...

weixin_30744613的博客 321

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

c++向oracle数据库写入图片,C++通过OCCI操作Oracle数据库详解

HelloOracle.cpp#include #define LINUXOCCI //避免函数重定义错误#include using namespace std;using namespace oracle::occi;#pragma comment(lib,"E:\\app\\Administrator\\product\\11.2.0\\dbhome_2\\OCI\\lib\\MSVC\\o...

weixin_34891592的博客 231

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Oracle表数据的C++存取接口

Oracle的表数据有多种存取方式,这里,着重介绍oracle 9i及其以后版本提供的C++接口,一种目前为止,最简单实用的编程接口 Oracle表数据的C/C++存取方法 Pro*C/C++ Pro*C/C++是非常传统的接口,底层接口是 SQL-LIB,是一种在 C/C++代码里直接插入SQL、PL/SQL语句实现Oracle 数据库操作方法.虽然还是有很多公司依然采用这种接口方法,

hu_zhi_de的专栏 629

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

上一篇: (json学习七)使用JSON的方法
下一篇: jsp九大默认对象
mincheat
博客等级 码龄17年 46粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值