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

📄 otlhandle.cpp

📁 一个利用OTL编写的数据库编程访问接口类
💻 CPP
字号:
// OtlHandle.cpp: implementation of the COtlHandle class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "OtlHandle.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

COtlHandle::COtlHandle()
{
   ini_otl();
   
   m_db.set_timeout(20 * 1000);
   m_db.set_max_long_size(20000);
   
}

COtlHandle::~COtlHandle()
{
   fini_otl();
}
//建立数据库连接
bool COtlHandle::ConnectDB(const char * strConn,std::string& strErr)
{
    try
	{
		m_db.rlogon(strConn);
	}
	catch(otl_exception& p)
	{ // intercept OTL exceptions
		char szErr[256];
		sprintf(szErr,"%s",p.msg);
		strErr = szErr;
		return false;
	}
	m_strConnStr = strConn;
	return true;
}
//重新连接数据库
bool COtlHandle::ReConnect(std::string& strErr)
{
    try
	{
		fini_otl();//
		ini_otl(); //
		m_db.set_timeout(20*1000);
		m_db.rlogon(m_strConnStr.c_str());
	}
	catch(otl_exception& p)
	{ // intercept OTL exceptions
		char szErr[256];
		sprintf(szErr,"%s",p.msg);
		strErr = szErr;
		return false;
	}
	
	return true;
}
//直接执行
bool COtlHandle::ExcuteSQL(const char * strSQL,std::string& strErr)
{
    char szErr[512];
	try
	{
		otl_cursor::direct_exec
		(
			m_db,
			strSQL
		);  // create table
	}
	catch(otl_exception& p)
	{ // intercept OTL exceptions
		sprintf(szErr,"%s",p.msg);
		return false;
	}
	return true;
}
//  
bool COtlHandle::GetDataSetFromDB(const char * strQuery, otl_stream *pDataSet)               
{
	char strErr[256];
	
	try
	{
		
		otl_stream i(50, // buffer size may be > 1
			strQuery,  	 // SELECT statement
			m_db         // connect object
			); 
		 pDataSet = &i;
	}
	catch(otl_exception& p)
	{
		printf(strErr,"%s",p.msg); // print out error message
		printf(strErr,"%s",p.stm_text); // print out SQL that caused the error
		return false;
	}
	return true;
}
bool COtlHandle::ErrHandle(const std::string& strErr)
{
	if(strErr.empty())
		return true;
	std::string strTemp;
	if(!strErr.empty() 
		&& (strErr.substr(0,9) == CONNECT_LOSED 
		|| strErr.substr(0,9)  == NO_CONNECT 
		|| strErr.substr(0,9)  == ENVI_NO_INIT)
		)//
	   {
		
		if(!this->ReConnect(strTemp))
			return false;
	   }
	   if(!strErr.empty() && (strErr.substr(0,9) == NO_TABLESPACE))//
	   {
		   return false;
	   }
	   if(!strErr.empty() && (strErr.substr(0,9) != TABLE_NO_EXIST))
		   return false;
	   
	   return false;
}

void COtlHandle::ini_otl()
{
    otl_connect::otl_initialize(); // initialize OCI environment
}
void COtlHandle::fini_otl()
{
	if(m_db.connected)
	   m_db.logoff();

#ifndef OTL_ODBC
	otl_connect::otl_terminate();
#endif

}

//

⌨️ 快捷键说明

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