📄 db.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 + -