首页产品库评测行情新闻|手机数码笔记本台式机DIY硬件数字家庭数码相机办公外设|软件下载游戏开发|社区

更多

数码相机
MP4
LCD
机箱
音箱

软件资讯设计 工具 系统 开发 安全 办公 陶吧 IT教育 Vista频道 | 下载中心酷我音乐盒 腾讯QQ
天极网 > 开发频道>oracle OCCI 的一个简单的包装类的实现

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

2007-04-09 07:00作者:liulj出处:论坛整理责任编辑:卢林嘉

  最近在学习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;
  }


  阅读关于 oracle OCCI 包装类 的全部文章

关注此文的读者还看过:

返回开发频道首页

共1页。 1
  • 1.oracle OCCI 的一个简单的包装类的实现

软件频道最新更新

热点推荐

IT嘉年华

编辑推荐

软件下载

热门
推荐

网友关注

软件
资料
游戏

装机推荐

文章排行

本周
本月
最新更新
天极服务|关于我们|About us|网站律师|RSS订阅|友情合作|加入我们|天极动态|网站地图|意见反馈|MSN/QQ上看天极
Copyright (C) 1999-2012 Yesky.com, All Rights Reserved 版权所有 天极网络