util.cpp

来自「ICE-3.2 一个开源的中间件」· C++ 代码 · 共 154 行

CPP
154
字号
// **********************************************************************//// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.//// This copy of Ice is licensed to you under the terms described in the// ICE_LICENSE file included in this distribution.//// **********************************************************************#include <Ice/Ice.h>#include <HR.h>#include <Util.h>#include <sstream>using namespace std;using namespace oracle::occi;ConnectionHolder::ConnectionHolder(StatelessConnectionPool* pool) :     _con(pool->getAnyTaggedConnection()),    _txDone(false),    _pool(pool){}voidConnectionHolder::commit(){    _txDone = true;    try    {        _con->commit();    }    catch(const SQLException& e)    {        throw HR::SqlException(e.what());    }}voidConnectionHolder::rollback(){    _txDone = true;    try    {        _con->rollback();    }    catch(const SQLException& e)    {        throw HR::SqlException(e.what());    }}ConnectionHolder::~ConnectionHolder(){    if(!_txDone)    {        _txDone = true;        try        {            _con->rollback();        }        catch(const std::exception&)        {        }    }    try    {        _pool->releaseConnection(_con);    }    catch(const std::exception&)    {    }}StatementHolder::StatementHolder(Connection* con) :    _con(con),    _stmt(con->createStatement()){}StatementHolder::StatementHolder(const ConnectionHolderPtr& conh) :    _con(conh->connection()),    _stmt(conh->connection()->createStatement()){} StatementHolder::~StatementHolder(){    _con->terminateStatement(_stmt);}stringencodeRef(const RefAny& ref, Environment* env){    string result;    ub4 length = OCIRefHexSize(env->getOCIEnvironment(), ref.getRef());    OraText* buffer = new OraText[length];    OCIError* error = 0;    OCIHandleAlloc(env->getOCIEnvironment(), reinterpret_cast<void**>(&error), OCI_HTYPE_ERROR, 0, 0);    sword status = OCIRefToHex(env->getOCIEnvironment(), error, ref.getRef(), buffer, &length);    if(status == OCI_SUCCESS)    {        result.assign(reinterpret_cast<char*>(buffer), length);    }    else    {        cerr << "encodeRef failed: ";        sb4 errcode = 0;        OraText buf[512];        OCIErrorGet(error, 1, 0, &errcode, buf, 512, OCI_HTYPE_ERROR);        cerr << reinterpret_cast<char*>(buf) << endl;    }    OCIHandleFree(error, OCI_HTYPE_ERROR);    delete[] buffer;    return result;}RefAnydecodeRef(const string& str, Environment* env, Connection* con){    OCIRef* ref = 0;    OCIError* error = 0;    OCIHandleAlloc(env->getOCIEnvironment(), reinterpret_cast<void**>(&error), OCI_HTYPE_ERROR, 0, 0);    sword status = OCIRefFromHex(env->getOCIEnvironment(), error,                                 con->getOCIServiceContext(),                                  reinterpret_cast<const OraText*>(str.c_str()), str.length(),                                 &ref);        if(status == OCI_SUCCESS)    {           OCIHandleFree(error, OCI_HTYPE_ERROR);        return RefAny(con, ref);    }    else    {        cerr << "decodeRef failed: ";        sb4 errcode = 0;        OraText buf[512];        OCIErrorGet(error, 1, 0, &errcode, buf, 512, OCI_HTYPE_ERROR);        cerr << reinterpret_cast<char*>(buf) << endl;        OCIHandleFree(error, OCI_HTYPE_ERROR);        throw Ice::ObjectNotExistException(__FILE__, __LINE__);    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?