Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1813472
  • 博文数量: 473
  • 博客积分: 13997
  • 博客等级: 上将
  • 技术积分: 5953
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-22 11:52
文章分类

全部博文(473)

文章存档

2014年(8)

2013年(38)

2012年(95)

2011年(181)

2010年(151)

分类: 数据库开发技术

2011-10-28 11:33:20

TOcci.h

#ifndef _OCCIDATABASE_H_
#define _OCCIDATABASE_H_

using namespace oracle::occi;
using namespace std;

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;
}

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 main(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 = "    }
    query->close(rs);
    delete(query);
    return 1;
}
阅读(810) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~