⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 db.cpp

📁 Web URL 解析程序服务器端
💻 CPP
字号:
#include "DB.h"

bool DB::fConnActive=false;
int  DB::m_iReConnCount=0;
Connection* DB::m_pConn=NULL;
CWriteDateLog* DB::m_pLog=NULL;
string DB::m_tns="";
string DB::m_user="";
string DB::m_pwd="";
string DB::m_name="";

DB::DB(CWriteDateLog* in, string strName)
{	
	m_pLog=in;
	m_name="["+strName+"]";
	m_pConn=new Connection;
	
	db::init();
}

DB::~DB()
{	
	if(fConnActive)
		m_pConn->drop();
		
	if(NULL != m_pConn)
	{
		delete m_pConn;
		m_pConn=NULL;	
	}
}

bool DB::DbOpen(const char *tns, const char *user, const char *pwd)
{
	if(NULL == m_pConn || NULL == m_pLog || NULL == tns || NULL == user || NULL == pwd) 
		return false;
		
	m_tns=(string)tns;
	m_user=(string)user;
	m_pwd=(string)pwd;
	
	try{
		fConnActive=false;
		m_pConn->drop();
		db::connect(m_tns, m_user, m_pwd, *m_pConn);
		fConnActive=true;
		m_iReConnCount=0;
		*m_pLog<<TIME<<m_name<<"连接数据库成功!"<<END;
		return true;
	}catch(OraError &ex){
		if(m_iReConnCount<10)
		{
		*m_pLog<<TIME<<m_name<<"连接数据库异常:"<<ex.message<<END;
		m_iReConnCount++;
		}
		sleep(10);
	}
	return false;
}

bool DB::Update(string strSQL)
{
	if(NULL == m_pLog) 
		return false;
	else if(NULL == m_pConn)
	{   
		*m_pLog<<TIME<<m_name<<"数据库未连接!"<<END;
		return false;
	}
	else if("" == strSQL) 
	{
		*m_pLog<<TIME<<m_name<<"SQL更新语句为空字符串!"<<END;
		return false;
	}
	else if(!fConnActive) 
	{
		if(m_iReConnCount<5)
		*m_pLog<<TIME<<m_name<<"数据库连接已关闭!"<<END;
		return false;
	}
	
	try{
		m_pConn->execUpdate(strSQL);
		return true;
	}catch(OraError &ex){
		*m_pLog<<TIME<<m_name<<strSQL<<"\n更新记录集异常:"<<ex.message<<END;
		if(NULL != strstr(ex.message.c_str(),"ORA-01012") || NULL != strstr(ex.message.c_str(),"ORA-03113") || NULL != strstr(ex.message.c_str(),"ORA-03114"))
		{
			*m_pLog<<TIME<<m_name<<"数据库重连......"<<END;
			while(!DbOpen(m_tns.c_str(),m_user.c_str(),m_pwd.c_str())){}
		}
	}
	return false;
}

bool DB::Select(string strSQL, Cursor& cur)
{	
	if(NULL == m_pLog) 
		return false;
	else if(NULL == m_pConn)
	{   
		*m_pLog<<TIME<<m_name<<"数据库未连接!"<<END;
		return false;
	}
	else if("" == strSQL) 
	{
		*m_pLog<<TIME<<m_name<<"SQL更新语句为空字符串!"<<END;
		return false;
	}
	else if(NULL == &cur) 
	{
		*m_pLog<<TIME<<m_name<<"游标参数不存在!"<<END;
		return false;
	}
	else if(!fConnActive) 
	{
		if(m_iReConnCount<5)
		*m_pLog<<TIME<<m_name<<"数据库连接已关闭!"<<END;
		return false;
	}
	
	try{
		m_pConn->execQuery(strSQL, cur);
		return true;
	}catch(OraError &ex){
		*m_pLog<<TIME<<m_name<<strSQL<<"\n查询记录集异常:"<<ex.message<<END;
		if(NULL != strstr(ex.message.c_str(),"ORA-01012") || NULL != strstr(ex.message.c_str(),"ORA-03113") || NULL != strstr(ex.message.c_str(),"ORA-03114"))
		{
			cur.drop();
			*m_pLog<<TIME<<m_name<<"数据库重连......"<<END;
			while(!DbOpen(m_tns.c_str(),m_user.c_str(),m_pwd.c_str())){}
		}
	}catch(...){
		*m_pLog<<TIME<<m_name<<strSQL<<"\n查询记录集异常:"<<"系统错误"<<END;
	}
	return false;	
}

⌨️ 快捷键说明

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