动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息

本月文章推荐
.为什么在mc文件里面定义的FEATUR.
.使自己暂时脱离 root 的身份.
.终于以一种奇怪的方式搞定了Orac.
.PL/SQL序列.
.甲骨文:迷雾重重.
.Oracle Application Serve.
.Oracle提供优秀的中间件软件包.
.教你学会Script在Oracle中的应用.
.配置好oms不能搜索到数据库节点的.
.管理Oracle OLAP时清除通往OLAP的.
.如何在grub中指定内存大小.
.Oracle弱智900问(1).
.关于用户进程,服务进程,后台进.
.如何手工建立数据库.
.ORACLE客户端连服务器的注意事项.
.Oracle 发布免费开发工具 Raptor.
.在RHAS3上成功安装Oracle9204.
.用JDBC连接Oracle数据库的十项技.
.J2ME 2005移动开发这场竞赛的领跑.
.ORACLE UPDATE 语句语法与性能分.

oracle OCCI 的一个简单的包装类的实现

发表日期:2007-4-9 |


  最近在学习oracle 的c++的编程接口OCCI,自己做了一个简单的包装类,源码贴出来供大家参考。此程序并没有经过严格的测试,只是兴趣所至,大家如果要商用的话,还需进一步完善,代码在vs2005和AIX的xlC中测试通过。

  注意:如果需要在vs2005中链接,需要到oracle网站上下载最新的vs2005的occi库文件。

以下是引用片段:
  TOcci.h
  #ifndef _OCCIDATABASE_H_
  #define _OCCIDATABASE_H_
  #include 
  #include 
  #include 
  using namespace oracle::occi;
  using namespace std;
  namespace happyever
  {
  class TOcciDatabase
  {
  public:
  static TOcciDatabase* getInstance(string usr, string passwd, string db);
  int getConnectCount(){ return _Instance->count; };
  Connection* getConnect(){ count++;return _Instance->conn; };
  ~TOcciDatabase();
  protected:
  TOcciDatabase(){};
  TOcciDatabase(string usr, string passwd, string db);
  private:
  static TOcciDatabase* _Instance;
  static int count;
  Environment *env;
  Connection *conn;
  };
  int TOcciDatabase::count = 0;
  TOcciDatabase* TOcciDatabase::_Instance = 0;
  TOcciDatabase::TOcciDatabase(string usr, string passwd, string db)
  {
  try
  {
  env = Environment::createEnvironment (Environment::DEFAULT);
  conn = env->createConnection (usr, passwd, db);
  }
  catch(SQLException ex)
  {
  cout<<"Exception thrown for getConnect"< 
  cout<<"Error number: "<< ex.getErrorCode() << endl;
  cout< 
  throw ex;
  }
  };
  TOcciDatabase::~TOcciDatabase()
  {
  try
  {
  env->terminateConnection (conn);
  Environment::terminateEnvironment (env);
  }
  catch(SQLException ex)
  {
  cout<<"Exception thrown for getConnect"< 
  cout<<"Error number: "<< ex.getErrorCode() << endl;
  cout< 
  throw ex;
  }
  };
  TOcciDatabase* TOcciDatabase::getInstance(string usr, string passwd, string db)
  {
  if(_Instance == 0)
  {
  _Instance = new TOcciDatabase(usr,passwd,db);
  }
  return _Instance;
  };
  class TOcciQuery
  {
  private:
  Connection *conn;
  Statement *stmt;
  bool isAutoCommit;
  TOcciQuery(){};
  public :
  TOcciQuery(Connection *connect){ conn = connect; };
  void beginTrans();
  void commit();
  void roolback();
  boolean getAutoCommit();
  ResultSet* executeQuery(string sql) ;
  void executeUpdate(string sql) ;
  void close() { if(stmt != NULL) conn->terminateStatement (stmt); };
  void close(ResultSet* rs);
  };
  void TOcciQuery::close(ResultSet* rs)
  {
  if(rs != NULL)
  stmt->closeResultSet (rs);
  if(stmt != NULL)
  conn->terminateStatement (stmt);
  };
  void TOcciQuery::beginTrans()
  {
  try
  {
  isAutoCommit = stmt->getAutoCommit();
  stmt->setAutoCommit(false);
  }
  catch(SQLException ex)
  {
  cout<<"Exception thrown for beginTrans"< 
  cout<<"Error number: "<< ex.getErrorCode() << endl;
  cout< 
  throw ex;
  }
  };
  void TOcciQuery::commit()
  {
  try
  {
  conn->commit();
  stmt->setAutoCommit(isAutoCommit);
  }
  catch(SQLException ex)
  {
  cout<<"Exception thrown for commit"< 
  cout<<"Error number: "<< ex.getErrorCode() << endl;
  cout< 
  throw ex;
  }
  };
  void TOcciQuery::roolback()
  {
  try
  {
  conn->rollback();
  stmt->setAutoCommit(isAutoCommit);
  }
  catch(SQLException ex)
  {
  cout<<"Exception thrown for roolback"< 
  cout<<"Error number: "<< ex.getErrorCode() << endl;
  cout< 
  throw ex;
  }
  };
  boolean TOcciQuery::getAutoCommit()
  {
  boolean result = false;
  try
  {
  result = stmt->getAutoCommit();
  }
  catch(SQLException ex)
  {
  cout<<"Exception thrown for getAutoCommit"< 
  cout<<"Error number: "<< ex.getErrorCode() << endl;
  cout< 
  throw ex;
  }
  return result;
  };
  ResultSet* TOcciQuery::executeQuery(string sql)
  {
  ResultSet*rs = NULL;
  try
  {
  stmt = conn->createStatement();
  rs = stmt->executeQuery(sql);
  }
  catch (SQLException ex)
  {
  cout<<"Exception thrown for executeQuery"< 
  cout<<"Error number: "<< ex.getErrorCode() << endl;
  cout< 
  throw ex;
  }
  return rs;
  };
  void TOcciQuery::executeUpdate(string sql)
  {
  try
  {
  stmt = conn->createStatement();
  stmt->executeUpdate(sql);
  }
  catch (SQLException ex)
  {
  cout<<"Exception thrown for executeUpdate"< 
  cout<<"Error number: "<< ex.getErrorCode() << endl;
  cout< 
  throw ex;
  }
  };
  }
  #endif /*_OCCIDATABASE_H_*/
  测试程序main.cpp源码如下:
  // occi.cpp : 定义控制台应用程序的入口点。
  //
  #include "stdafx.h"
  #include "TOcci.h"
  int _tmain(int argc, _TCHAR* argv[])
  {
  using namespace happyever;
  TOcciQuery *query = new
  TOcciQuery(TOcciDatabase::getInstance("cal","cal","v2b76")->getConnect());
  string strSQL = "select count(*) from serv_value_total";
  ResultSet* rs = query->executeQuery(strSQL);
  while(rs->next())
  {
  std::cout<<"count = "<getInt(1)< 
  }
  query->close(rs);
  delete(query);
  return 1;
  }

上一篇:SQLSERVER,ORACLE,MYSQL高效分页查询 人气:4556
下一篇:用ORACLE8i修复数据库坏块的三种方法 人气:2794
浏览全部oracle OCCI的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-7 Web Wiz Forums(论坛系统) v9.53
2008-10-7 Web Wiz Forums(论坛系统) v9.53
2008-10-7 Web Wiz Forums(论坛系统) v9.53
2008-10-7 HDWiki v4.0.1 bulid 081007 UTF
2008-10-7 迅易评选投票管理系统 v10.0
2008-10-7 HDWiki v4.0.1 bulid 081007 GBK
2008-10-7 Bitrac单用户博客 v1.14 bulid 0
2008-10-7 OpenX(广告管理系统) v2.6.2 多国
2008-10-7 乐铺网店系统免费普及版 v3.41
2008-9-29 酷狗音乐(原KuGoo)2008 v5.310 正
2008-9-29 QQTab 1.1
2008-9-29 网络传送带 Net Transport 2.64a
2008-9-29 谷歌金山词霸v1.8
2008-9-29 TweakVI 1.0 Build 1090
2008-9-29 ACDSee Pro 2.5 Build 333 汉化绿
2008-9-29 Winamp v5.541(2189) 周明波简体
2008-9-27 CCleaner 2.12.651
2008-9-27 Mozilla Thunderbird 2.0.0.17 英
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号