VC使用OCCI开发的简介
VC++环境设置
1加include files项:%ORACLE_HOME%\oci\include
%ORACLE_HOME% = HKEY_LOCALMACHINE_SOFTWARE\SOFTWARE\ORACLE\KEY_OraDb10g_home 注册表键
2、加library file
项:%ORACLE_HOME%\oci\lib\msvc\vc6 %ORACLE_HOME%\oci\lib
3、加lib文件oraocci10.lib (VS10的链表-强制依赖项)
4、在preprocessor definitions 下面去掉_DEBUG宏,加入WIN32COMMON _DLL
_MT 3个宏;或在#include <occi.h>前面加以下代码
#inndef WIN32COMMON
#define WIN32COMMON
#endif
#inndef _DLL
#define _DLL
#endif
#inndef _MT
#define _MT
#endif
5、在project options 里将MLd去掉d,去掉/GZ。
或者在build->set active configouration 打开set active project configouration对话
框,选择win32 release。
使用方法:
#include <occi.h>
using namespace oracle::occi;
环境变量Environment
Environment *env;
Env=Environment::creatEnvironment(Enviroment::DEFAULT);
Environment::terminateEnvironment(env);
连接对象:Connection
Connection *conn;
Conn=env->createConnection(user,passwd,db);
Env->terminateConnection(conn);
普通连接池:
ConnectionPool *connPool;
connPool=env->creatConnectionPool(poolusername,poolpasswd,connectstring,minco
nn,maxconn,incrconn);
普通连接:
con=connPool->createConnection(username,password);
代理连接:
ConectionPool->createProxyConnection(
Const string &username,
Connetion::ProxyType proxtType=Connection::PROXY_DEFAULT);
或者
ConnectionPool->createProxyConnection(
Const string &username,
String roles[],
Int numRoles,
Connection::ProxyType proxyType=Connection::PROXY_DEFAULT);
无状态连接池:(连接池用完后可自动增加)
StatlessConnectionPool *spool=
Enviroment::CreatStatlessConnectionPool(username,passwd,connectstring,maxco
nn,minconn,incrconn,HOMOGENOUS);
Connection *conn=spool->getConnection();//获取连接对象
spool->releaseConnection(conn,”CN”);//释放连接,同时标记
env->terminateConnectionPool(spool); //销毁连接池
statement对象:
1、标准
String sqlstmt = “SELECT author_id,author_name FROM author_tab order by
author_id;//occi数据类型
stmt=conn->createStatement(sqlstmt); //创建标准类型
ResultSet *rset=stmt->executeQuery(); //返回结果
Cout<<rset->getInt(1)<<rset->getSting(2); //第1、2列
Stmt->closeResultSet(rset); //关闭
Conn->terminateStatement(stmt); //关闭
执行SQL语句时可执行以下函数:
execute():一般SQL语句,create\insert
executeUpdate():执行DDL\DML语句
executeArrayUpdate():复杂的SQL语句
executeQuery():查询
setSQL()
getSQL():获取当前执行的SQL语句
SQLException ex:捕捉发生错误的异常;ex.getErrorCode() ex.getMessage()
2、带参数
Void insertBind(int c1,string c2)
{
String sqlStmt=”INSERT INTO author_tab VALUES(:x,:y);
Stmt=conn->createStatement(sqlStmt); try{
stmt->setInt(1,c1); stmt->setString(2,c2);stmt->executeUpdate();
}catch(SQLException ex)
{cout<<ex.getErrorCode()<<ex.getMessage();}
Conn->terminateStatement;
}
3、带存储过程的
A:调用过程:
Statement *stmt=con->createStatement(“BEGIN demo_proc(:v1,:v2,:v3)
END;”);//3参数
Cout<<stmt->getSQL();
stmt->setInt(1,10); stmt->setMaxParamSize(2,30); stmt->String(2,”IN”);
stmt->registerOutParam(3,OCCISTRING,30,””);
int updateCount= stmt->executeUpdate();
B:调用函数:
Statement *stmt=con->createStatement(“BEGIN:a:=demo_proc(:v1,:v2,:v3)
END;”);//4参数
Cout<<stmt->getSQL();
stmt->setInt(2,10); stmt->setMaxParamSize(3,30); stmt->String(2,”IN”);
stmt->registerOutParam(1,OCCISTRING,30,””);
stmt->registerOutParam(4,OCCISTRING,30,””);
int updateCount= stmt->executeUpdate();
批量编辑数据
Statement *stmt=conn->createStatement(“INSERT INTO emp(empno,ename) VALUES(:1,:2)”);
stmt->setMaxIteration(10); //指定最多有多少个记录时执行executeUpdate
stmt->setMaxParamSize(2,100); //指定最大的数据缓冲区
stmt->setInt(1,10001); stmt->setString(2,”john”); stmt->setIteartion();//加入缓冲区
stmt->executeUpdate();
操作流数据(getStream(),writeBuffer(),writeLastBuffer(),readBuffer(),
readLastBuffer())
数据类型BLOB、CLOB、LONG、LONG RAW 、RAW 、VARCHAR2的数据
为流数据
Statement *stmt=conn->creatStatement(“INSERT INTO testtab(longeo1) VALUES(:1)”);
stmt->setCharacterStreamMode(1,10000); stmt->executeUpdate();
Stream *instream= stmt->getStream(1); char buffer[10000];
instream->writeBuffer(buffer,len);instream->writeLastBuffer(buffer,len);
stmt->closeStream(instream);
事务的提交与回滚 Connection::commit();Connection::rollback()
自动提交Statement::setAutoCommit(TRUE/FALSE);
Statement对象的缓冲区:
1、连接对象的缓冲区:
conn->setStmtCacheSize(10); int csize=conn->getStmtSize();
conn->terminateStatemen(stme); stmt->disableCaching();
2、连接池缓冲区:
conPool->setStmtCacheSize();
Metadata对象:查看数据库对象的属性与元数据
MetaData md=conn->getMetadata(“emp”,PTYPE_UNK);//建立对象
int objectType=md.getInt(Metadata::ATTY_OBJ_PTYPE);//对象类型
int columnCount=md.getInt(Metadata:ATTR_OBJ_NUM_COLS);//对象的字段数
Timestamp objts=md.getTimestamp(Metedata::ATTR_OBJ_TIMESTAMP);//时区
vector<MetaData>cols=md.getVector(Metadata::ATTR_LIST_COLUMS);//返回集
合对象
cols[0].getString(Metedata::ATTR_NAME);//第一个字段名
cols[0].getInt(Metedata::ATTR_DATA_TYPE);//第一个字段类型
Statement *stmt =conn->creatStatement(“select * from emo”);
ResultSet *rs=stmt->executeQuery();
Vector(MeteData) selectcols=rs->getColumnListMetaData();
int columnCount=selectcols.size();
for(int i=0;i<columnCount;i==)
{
cout<<selectcols[i].getString(MetaData::ATTR_NAME);
cout<<selectcols[i].getInt(MetaData::ATTR_DATA_TYPE);
}
VC使用OCCI开发的简介相关推荐
- Windows驱动开发书籍简介
分享到 一键分享 QQ空间 新浪微博 百度搜藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 首页 我的主页 相册 广 ...
- 视频教程-VC#.NET+GDI+开发交互式CAD系统-C#
VC#.NET+GDI+开发交互式CAD系统 图书作者,代码从业者,N多年 苏金明 ¥799.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程,领取优惠, ...
- HealthKit开发快速入门教程之HealthKit开发概述简介
HealthKit开发快速入门教程之HealthKit开发概述简介 2014年6月2日召开的年度开发者大会上,苹果发布了一款新的移动应用平台,可以收集和分析用户的健康数据.该移动应用平台被命名为&qu ...
- 100个vc小项目开发:二、一步一点设计音乐播放器 [I]
100个vc小项目开发:二.一步一点设计音乐播放器 [源码解读] 文章作者: July 软件来源:开源 ================== 1.有不正之处,恳请指正. 2.本文贴出的是关键实现代码部 ...
- 图解VC#版DirectX开发教程二 - 摄像机
用VC#进行DirectX开发,程序结构大体都是一样的. 上一篇博文,VC#版DirectX开发入门详解 http://blog.csdn.net/bcbobo21cn/article/details ...
- HighNewTech:低代码(0代码/无代码,无需代码)开发的简介以及如何选择最合适的低代码开发工具
High&NewTech:低代码(0代码/无代码,无需代码)开发的简介以及如何选择最合适的低代码开发工具 导读:在互联网时代,博主经常反思一个问题,如何跟进这个快速发展的时代才能不会被淘汰?博 ...
- BigData:大数据开发的简介、核心知识(linux基础+Java/Python编程语言+Hadoop{HDFS、HBase、Hive}+Docker)、经典场景应用之详细攻略
BigData:大数据开发的简介.核心知识(linux基础+Java/Python编程语言+Hadoop{HDFS.HBase.Hive}+Docker).经典场景应用之详细攻略 BigData:大数 ...
- VC用MFC开发的圆形进度条控件
DownLoad Src VC用MFC开发的圆形进度条控件 visualsan@yahoo.cn NUAA zss 在NBA2007游戏里,还有很多科幻电影里,经常可以看到圆形进度条.有的用来显示导弹 ...
- Enterprise Library 5.0 开发向导- 简介(1)
Enterprise Library 5.0 开发向导- 简介(1) 微软企业库 Enterprise Library 5.0 正式发布!!! 在基于微软.NET 框架开发的应用程序中,无论是企业级的 ...
最新文章
- 关于libStagefright系列漏洞分析
- python templates_详解Python的Django框架中的templates设置
- 吴恩达深度学习 —— 3.6 激活函数
- jira7.3.6的安装步骤
- 学python编程_程序员学Python编程或许不知的十大提升工具
- 计算机会计学ufo报表,UFO报表管理实验报告.doc
- ArcGIS矢量数据重分类
- 区块链入门教程——什么是区块链?
- python将PDF文件转换为图片
- 2022年上半年信息系统项目管理师下午案例分析真题及答案解析
- syn包发送(拒绝攻击,但是有问题)
- python爬取b站弹幕分析_Python爬取分析B站动漫《柯南》弹幕,从数据中分析接下来的剧情...
- JAVA内存区域划分
- 微软ad域服务器 管理用户,威联通NAS助企业解决Windows AD域账户管理
- 成长的思考:如何在工作中保持高速的自我成长
- Selenium Chrome设置代理之后验证依旧是本机ip原因
- System Verilog的基本数据类型
- Android 各版本 设置 USB 默认连接 MTP 模式 ( Android 6.0+ )
- android系统怎么取消,安卓系统hd怎么关闭
- python-外部程序的调用os库、subprocess 模块
热门文章
- 工具-360安全卫士,打开ARP防火墙(解决问题:访问疑似夹带攻击行为)
- SpringBoot微服务部署
- Android登录页面设计
- VMware 虚拟机与主机网络互通
- 顾小清:教育信息化进入数字化转型重要时期
- java udp nio_Java NIO系列教程(十) Java NIO DatagramChannel
- 用几行python代码获取Yahoo,tushare股票数据,超级爽!!(比爬网好太多)
- 误删电脑文件怎么恢复
- ROS2 机器人操作系统入门和安装以及如何使用 .NET 进行开发
- 移动硬盘和u盘连接计算机,电脑文件自动复制到U盘或移动硬盘,当它们插入电脑时...