Oracle OCCI的一個簡單的封裝類的實現

來源:互聯網
上載者:User

自己做了一個簡單的封裝類,源碼貼出來供大家參考。此程式並沒有經過嚴格的測試,還需進一步完善,代碼在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;         }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.