文章作者 100test 发表时间 2007:05:07 16:26:23
来源 100Test.Com百考试题网
注意:如果需要在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 = "0select count(*) from serv_value_total". ResultSet* rs = query->executeQuery(strSQL). while(rs->next()) { std::cout<<"count = " query->close(rs). 0delete(query). return 1. } |
相关文章
Oracle系统密码文件创建、使用及维护
oracleOCCI的一个简单的包装类的实现
Oracle10g列掩码与关系视图比较
Oracle和DB2间基本架构和管理的差异
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛