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 + -
显示快捷键?