1. 创建OCCI环境变量

Environment *env = Environment::createEnvironment();

Environment对象的建立必须放在第一位,而且也必须是最后一个被终止

2. 终止OCCI环境变量

Environment::terminateEnvironment(env);

3. 连接数据库

Connection *conn = env->createConnection(usename,password,[connectionstring]);

connectstingr是数据库的连接串 (192.168.60.84:1521/orcl)

4. 断开数据库

env->terminateConnection(conn);

5. 创建连接池

数据库的连接必须要能被许多线程所使用,如果为每个线程都开一个数据库连接的话,当数量一大效率会明显的降低,所以我们通过创建连接池来处理这样的情况

ConnectionPool  *connPool= env->createConnectionPool(
const string &poolUseName,
const string &poolPassWord,
const string &connectstring,
unsigned int minConn,
unsigned int maxConn,
unsigned int incrConn);

poolUseName 是连接池的用户名

poolPassWord 是连接数据库的密码

connectstring 是数据库连接串

minConn 是最小连接数

maxConn 是最大连接数

incrConn 是指所有已连接数处于繁忙中且小于最大连接数时,每次增加的连接数

6. 断开连接池

env->terminateConnectPool(connPoll);

7. 创建Statement对象

Statement类包含了执行SQL语句的所有方法,是对数据库操作的具体实现

Statement *stmt = conn->createStatement();

createStatement()函数可以带参数或不带参数,如果带参数的话,参数必须是一个SQL语句;如果没有带参数,则在后面必须用 Statement类下setSQL()函数为Statement对象赋一个SQL语句

8. 终止Statement对象

Conn->terminateStatement(stmt);

9. 执行SQL语句

stmt->execute(); 执行所有非特殊声明的SQL语句

stmt->executeUpdate(); 执行所有DDL和DML(一条记录)的SQL语句

stmt->executeQurey(); 执行所有查询SQL语句

stmt->executeArrayUpdate(); 执行多记录的DML的SQL语句

10. 执行非查询语句

//准备SQL语句
stmt->setSQL(string &sql);
//绑定输入参数值
stmt->setString(1, 'zhangsan'); 指把zhangsan赋值给第一个参数,参数类型为字符串型
stmt->setInt(2, 1009); 指把1009赋值给第二个参数,参数类型为整型
//执行
stmt->executeUpdate();

11. 执行查询语句

//同上
//执行
ResultSet *rs = stmt->executeQuery();
//定义输出变量
//处理数据
rs->next(unsignedint numRows); 其中numRows为批量处理的记录行数
stmt->getInt(paramindex); 获取整型参数值,其中paramindex为参数所在的位置
stmt->getString(paramindex); 获取字符型参数值其中paramindex为参数所在的位置

12. 事务提交

手动提交:

Connection::commit();
Connection::rollback();

自动提交:

Statement::setAutoCommit(TRUE);

13. 例子

#include <iostream>
#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, srvName);
cout<<"conn success"<<endl;
env->terminateConnection(conn);
}
catch(SQLException e)
{
cout<<e.what()<<endl;
return -1;
}
Environment::terminateEnvironment(env);
cout<<"end!"<<endl; return 0;
}

参考文档:

http://blog.sina.com.cn/s/blog_53a72add01015zj4.html

oracle OCCI编程的更多相关文章

  1. 转:c++ Oracle OCCI 编程

    原地址http://blog.sina.com.cn/s/blog_53a72add01015zj4.html 找不到具体的出处,只好不写了. OCCI数据库ORACLE编程步骤1. 配置环境(1)  ...

  2. c++ Oracle OCCI 编程

    转载备忘:http://blog.sina.com.cn/s/blog_53a72add01015zj4.html 关于occi编程可以参考的链接: http://blog.itpub.net/162 ...

  3. OCCI编程接口介绍

    OCCI简介 Oracle® C++ Call Interface (OCCI) 是一套应用程序编程接口,它允许C++程序与一个或者多个Oracle数据库进行交互.OCCI给予你强大的数据库操作能力, ...

  4. Oracle OCCI学习之开篇

    官网:Oracle C++ Call Interface 一.OCCI介绍 Oracle C++ Call Interface(OCCI)是一个用于访问Oracle数据库的高性能且全面的API.基于标 ...

  5. ORACLE数据库编程

    第一章 Oracle数据库基本概念 一.介绍 Oracle数据库系统是美国Oracle(甲骨文)公司提供的以分布式数据库为 核心的一组软件产品,是目前最流行的客户/服务器(Client/Server, ...

  6. Oracle Proc编程性能优化经验

    Proc 是Oracle提供的一种数据库操作的API.它是基于ESql技术的,需要预编译后才可以变成普通c代码,非常不直观,使用起来不太方便,阅读也存在困难. 因为这些问题导致程序员平时开发中会出现一 ...

  7. 高性能 Oracle JDBC 编程

    了解如何利用连接和语句池特性来提高 Oracle 驱动的 JDBC 程序的性能.作者:Yuli Vasiliev2009 年 4 月发布使用诸如连接池和语句池等池技术可以显著提高数据库密集型应用程序的 ...

  8. oracle 10g编程

    一.概述 1.sql语言特点 sql语言采用集合操作方式,对数据的处理是成组进行的,而不是一条一条处理,听过使用集合操作方式,可以家加快数据的处理速度. 执行sql语句时每次只能发送并处理一条语句.如 ...

  9. Oracle数据库编程:在JDBC中应用Oracle

    9.在JDBC中应用Oracle: JDBC访问数据库基本步骤:          1.加载驱动          2.获取链接对象          3.创建SQL语句          4.提交S ...

随机推荐

  1. XLA

    原 TensorFlow技术内幕(七):模型优化之XLA(上) 2018年06月13日 14:53:49 jony0917 阅读数 5513   版权声明:本文为博主原创文章,遵循CC 4.0 by- ...

  2. BN和Relu

    Batch normalization + ReLU 批归一化(BN)可以抑制梯度爆炸/消失并加快训练速度 原论文认为批归一化的原理是:通过归一化操作使网络的每层特征的分布尽可能的稳定,从而减少Int ...

  3. 0x00 Wechall writeup

    目录 0x00 Wechall writeup Training: Get Sourced Training: ASCII Encodings: URL Training: Stegano I Tra ...

  4. DIV+CSS+JS实现色彩渐变字体

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  5. 【LG4437】[HNOI/AHOI2018]排列

    [LG4437][HNOI/AHOI2018]排列 题面 洛谷 题解 题面里这个毒瘤的东西我们转化一下: 对于\(\forall k,j\),若\(p_k=a_{p_j}\),则\(k<j\). ...

  6. Python3.6 SyntaxError: 'ascii' codec can't decode byte 0xe5 in position 7: ordinal not in range(128)

    Django项目上线之后,死活无法正常运行(本地正常) 开始排查了好久才发现是字符编码问题 前面的小坑基本有一些,好(我)解(忘)决(了). 不好解决的是这个报错: SyntaxError: 'asc ...

  7. 【微信小程序】手写索引选择器(城市列表,汽车品牌选择列表)

    摘要: 小程序索引选择器,点击跳转相应条目,索引可滑动,滑动也可跳转 场景:城市选择列表, 汽车品牌选择列表 所用组件: scroll-view(小程序原生) https://developers.w ...

  8. SpringBoot使用token简单鉴权

    本文使用SpringBoot结合Redis进行简单的token鉴权. 1.简介 刚刚换了公司,所以最近有些忙碌,所以一直没有什么产出,最近朋友问我登录相关的,所以这里先写一篇简单使用token鉴权的文 ...

  9. prometheus consul docker redis_exporter 自动注册配置

    0.启动redis_exporter redis_exporter: version: '2'services: redis_exporter: image: oliver006/redis_expo ...

  10. Shell脚本——添加和删除用户

    写一个脚本admin_user.sh,其用法格式为: admin_user.sh --add USERLIST --del USERLIST -v|--verbose -h|--help 其中, -h ...