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

📄 db.cpp

📁 TUXEDO连接数据库的例子
💻 CPP
字号:
#include "db.h"
#include <malloc.h>
#include <string.h>

/************************************************************
** 函数名:	Init
** 输  入:	
** 输  出:  	成功/失败 1/0
** 返回值:      True/False
** 描述:		初始化OCI 
** 作者:		John		 
** 日期:		2004.7.21		
** 版本:    	v1.0
**************************************************************/
BOOL CDbOracleDriver::Init()
{
	try
	{
		// 初始化OCI
		retcode = OCIInitialize((ub4) OCI_OBJECT, NULL,  NULL,NULL,  NULL );
	
		if(retcode != OCI_SUCCESS)
		{
			throw CDbOperException();
		}
		
	   // 初始化环境句柄
		retcode = OCIEnvInit( &m_envhp, (ub4) OCI_DEFAULT, 21, (dvoid **) &m_tmp  );
		
		if(retcode != OCI_SUCCESS)
		{	
			throw CDbOperException();
		}
	
		// 初始化错误句柄
		retcode = OCIHandleAlloc( (dvoid *) m_envhp, (dvoid **) &m_errhp, (ub4) OCI_HTYPE_ERROR, 52, (dvoid **) &m_tmp);
		
		if(retcode != OCI_SUCCESS)
		{	
			throw CDbOperException();
		}
	
		// 初始化服务句柄
		retcode = OCIHandleAlloc( (dvoid *) m_envhp, (dvoid **) &m_srvhp, (ub4) OCI_HTYPE_SERVER, 52, (dvoid **) &m_tmp);              
		
		if(retcode != OCI_SUCCESS)
		{	
			throw CDbOperException();
		}
		
		// 初始化上下文
		retcode = OCIHandleAlloc( (dvoid *) m_envhp, (dvoid **) &m_svchp, (ub4) OCI_HTYPE_SVCCTX,52, (dvoid **) &m_tmp);               
		
		if(retcode != OCI_SUCCESS)
		{	
			throw CDbOperException();
		}
		
		// 设置服务句柄的属性
		retcode = OCIAttrSet((dvoid *)m_svchp, OCI_HTYPE_SVCCTX, (dvoid *)m_srvhp, 0, OCI_ATTR_SERVER, m_errhp);      
		
		if(retcode != OCI_SUCCESS)
		{	
			throw CDbOperException();
		}
	}
	    catch (CDbOperException ex)
		{
			ex.printInit();
			return FALSE; 		
 		}
 	
	return TRUE;
}

/************************************************************
** 函数名:	OpenConnection
** 输  入:	CS_CHAR		*server,		服务器名
			CS_CHAR		*username,      用户名
			CS_CHAR		*password,      口令
			CS_INT      nSrvNameLen,    server长度
			CS_CHAR		*appname        应用名
** 输  出:  	成功/失败
** 返回值:      True/False   1/0
** 描述:		建立连接  
** 作者:		John		 
** 日期:		2004.7.21		
** 版本:    	v1.0
**************************************************************/
BOOL CDbOracleDriver::OpenConnection(CS_CHAR		*server,
							 CS_CHAR		*username,
							 CS_CHAR		*password,
							 CS_INT         	nSrvNameLen,
							 CS_CHAR		*appname)
{	
	strcpy(m_server,server);
	strcpy(m_username,username);
	strcpy(m_password,password);
	strcpy(m_appname,appname);
	m_nSrvNameLen = nSrvNameLen;    	
	// 连接数据库
	try{
		retcode = OCILogon(m_envhp, m_errhp, &m_svchp, (unsigned char*)username, strlen(username),  (unsigned char*)password, strlen(password), (unsigned char*)server, strlen(server));
	        
	    if(retcode != OCI_SUCCESS)
		{				
			throw CDbOperException();
		}
	}
	catch (CDbOperException ex)
 	{
		ex.printConn();
		return FALSE; 		
 	} 	
	return TRUE;
}

/************************************************************
** 函数名:	CloseConnection
** 输  入:	
** 输  出: 
** 返回值: 
** 描述:		关闭连接
** 作者:		John		 
** 日期:		2004.7.21		
** 版本:    	v1.0
**************************************************************/
void CDbOracleDriver::CloseConnection()
{
	
	try
	{
		// 释放用户会话、服务、上下文句柄
		retcode = OCILogoff (m_svchp,m_errhp);
		
		if(retcode != OCI_SUCCESS )
		{		
			throw CDbOperException();
		}		
		// 释放错误处理句柄
		retcode = OCIHandleFree (m_errhp, OCI_HTYPE_ERROR);
		
		if(retcode != OCI_SUCCESS )
		{		
			throw CDbOperException();
		}
		
		// 释放环境句柄
		retcode = OCIHandleFree (m_envhp, OCI_HTYPE_ENV);
	}
	catch (CDbOperException ex)
 	{
 		ex.printClos();
 		return ;
 	}
	return;                                 
}
/************************************************************
** 函数名:	setSql
** 输  入:	tableName(表名)    fieldName(字段名)       fieldValues(对应的字段值)
** 输  出:  	组合成sql语句放入变量cmdbuf中
** 返回值:      
** 描述:		构造insert语句
** 作者:		John		 
** 日期:		2004.7.21		
** 版本:    	v1.0
**************************************************************/
void  CDbOracleDriver::setSql(char *tableName,char *fieldName,char *fieldValues)
{
	char *sqlstr;
	int len;
//	int flag;
	len=strlen("insert into () values()")+strlen(tableName)+strlen(fieldName)+strlen(fieldValues)+100;
	sqlstr=new char[len];
	
	strcpy(sqlstr,"insert into ");
	strcat(sqlstr,tableName);
	strcat(sqlstr,"(");
	strcat(sqlstr,fieldName);
	strcat(sqlstr,") values(");
	strcat(sqlstr,fieldValues);
	strcat(sqlstr,")");
	
	cmdbuf=(char*)malloc(strlen(sqlstr)+10);
	strcpy(cmdbuf,sqlstr);
}
/************************************************************
** 函数名:	ExecuteSQL
** 输  入:	
** 输  出:	成功/失败
** 返回值: 
** 描述:		从变量cmdbuf中执行非查询类的SQL语句
** 作者:		John		 
** 日期:		2004.7.21		
** 版本:    	v1.0
**************************************************************/
BOOL CDbOracleDriver::ExecuteSQL()
{
	// 分配SQL句柄
	try
	{		
		retcode = OCIHandleAlloc((dvoid *)m_envhp, (dvoid **)&m_stmthp, OCI_HTYPE_STMT, 0, 0);
	
		if(retcode != OCI_SUCCESS )
		{			
		    throw CDbOperException();
		}
		
		// 准备SQL语句
		retcode = OCIStmtPrepare(m_stmthp, m_errhp, (unsigned char*)cmdbuf, strlen(cmdbuf), OCI_NTV_SYNTAX, OCI_DEFAULT);
		
		if(retcode != OCI_SUCCESS )
		{		
			throw CDbOperException();
		}
		
		// 执行SQL语句
		retcode = OCIStmtExecute(m_svchp, m_stmthp, m_errhp, 1, (ub4) 0,  NULL,  NULL, OCI_DEFAULT);
		
		if(retcode != OCI_SUCCESS  &&  retcode != OCI_NO_DATA)
		{			
			throw CDbOperException();
		}
		
		// 释放SQL句柄
	 	retcode = OCIHandleFree (m_stmthp, OCI_HTYPE_STMT);
		
		if(retcode != OCI_SUCCESS )
		{			
			throw CDbOperException();
		}
	}
	catch (CDbOperException ex)
	{
		ex.printExec();
		return FALSE; 		
 	}	
	return TRUE;
}
/************************************************************
** 函数名:	ExecuteSQL
** 输  入:	CS_CHAR         *cmdbuf		SQL语句
** 输  出:	成功/失败
** 返回值: 
** 描述:		执行非查询类的SQL语句
** 作者:		John		 
** 日期:		2004.7.21		
** 版本:    	v1.0
**************************************************************/
BOOL CDbOracleDriver::ExecuteSQL(CS_CHAR	*cmdsql)
{
	// 分配SQL句柄
	try
	{		
		retcode = OCIHandleAlloc((dvoid *)m_envhp, (dvoid **)&m_stmthp, OCI_HTYPE_STMT, 0, 0);
	
		if(retcode != OCI_SUCCESS )
		{			
		    throw CDbOperException();
		}
		
		// 准备SQL语句
		retcode = OCIStmtPrepare(m_stmthp, m_errhp, (unsigned char*)cmdsql, strlen(cmdsql), OCI_NTV_SYNTAX, OCI_DEFAULT);
		
		if(retcode != OCI_SUCCESS )
		{		
			throw CDbOperException();
		}
		
		// 执行SQL语句
		retcode = OCIStmtExecute(m_svchp, m_stmthp, m_errhp, 1, (ub4) 0,  NULL,  NULL, OCI_DEFAULT);
		
		if(retcode != OCI_SUCCESS  &&  retcode != OCI_NO_DATA)
		{			
			throw CDbOperException();
		}
		
		// 释放SQL句柄
	 	retcode = OCIHandleFree (m_stmthp, OCI_HTYPE_STMT);
		
		if(retcode != OCI_SUCCESS )
		{			
			throw CDbOperException();
		}
	}
	catch (CDbOperException ex)
	{
		ex.printExec();
		return FALSE; 		
 	}	
	return TRUE;
}

/*
int main(int argc,char* argv[],char * env[])
{
	CDbOracleDriver  conn;
	
	conn.Init();
	conn.OpenConnection("nms","cncnms","cncnms",23,"server1");
	conn.ExecuteSQL("insert into A(no) values(10)");
	conn.CloseConnection();
	cout<<"d"<<endl;

	return 0;
}

*/

⌨️ 快捷键说明

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