/************************************************************* /* Copyright (C), 2008-2010, StoneU Tech. Co., Ltd. /* 文件名: DBInterface.h /* 作者: Jesse /* 创建日期: 2010-08-02 /* 版本号: V1.0 /* 描述: 实现多种数据库的支持 /* 其它: /* 主要类模块: CDBInterface /* 历史修改记录: 作者 时间 版本 描述 Jesse 10/08/02 1.0 创建这个模块 ***************************************************************/ #include "stdafx.h" #include "DBInterface.h" #include "Global.h" namespace DBInterface { CDBInterface* CDBInterface::m_pDBInterface = NULL; // 静态成员函数,提供全局访问的接口 CDBInterface* CDBInterface::GetInstancePtr() { if( NULL == m_pDBInterface ) { m_pDBInterface = new CDBInterface(); } return m_pDBInterface; } // 设置数据库类型 void CDBInterface::SetDBType(char *pDBType) { strcpy(m_chDBType, pDBType); } //获取表最大的ID, 通用函数 INT CDBInterface::GetMaxID( CHAR *pTableName, CHAR *pFieldName, CHAR *pMaxID ) { CHAR strSQLText[MAX_SQL_LENGTH + 1] = ""; list list1; list::iterator it; sprintf(strSQLText, "select max(%s) as maxid from %s", pFieldName, pTableName); int nRet = CDBConnection::GetInstancePtr()->GetFieldValueList1(strSQLText, list1); if( 0 == list1.size() ) { return 0; } if( nRet != -1 ) { strcpy(pMaxID, list1.begin()->c_str()); } for( it = list1.begin(); it != list1.end(); ) { list1.erase(it++); } return nRet; } // 获取Summary资料 INT CDBInterface::GetSummaryInfo(char *pUid, char *pVarDesc, char *pID) { CHAR strSQLText[MAX_SQL_LENGTH + 1] = ""; list list1; list::iterator it; if (!_stricmp(m_chDBType, "SQL SERVER")) { sprintf(strSQLText, "select top 1 id from t_summary_log where varuid = \'%s\' and varname = \'%s\'", pUid, pVarDesc); } else if (!_stricmp(m_chDBType, "ACCESS97")) { sprintf(strSQLText, "select top 1 id from t_summary_log where varuid = \'%s\' and varname = \'%s\'", pUid, pVarDesc); } else if (!_stricmp(m_chDBType, "ACCESS2000")) { sprintf(strSQLText, "select top 1 id from t_summary_log where varuid = \'%s\' and varname = \'%s\'", pUid, pVarDesc); } else if(!_stricmp(m_chDBType, "PGSQL")) { sprintf(strSQLText, "select id from t_summary_log where varuid = \'%s\' and varname = \'%s\' limit 1", pUid, pVarDesc); } int nRet = CDBConnection::GetInstancePtr()->GetFieldValueList1(strSQLText, list1); if( 0 == list1.size() ) { return 0; } if( nRet != -1 ) { strcpy(pID, list1.begin()->c_str()); } for( it = list1.begin(); it != list1.end(); ) { list1.erase(it++); } return nRet; } //插入Summary记录 INT CDBInterface::InsertSummaryRecord( CHAR* pDevName, // 设备名称 CHAR* pHappenTime, // 发生时间 CHAR* pMemo, // 备注 CHAR *pVarDesc, // 变量描述 double dbCurrValue, // 当前值 CHAR* pVarUid, // 设备Uid CHAR* pVarName // 变量名称 ) { CHAR strSQLText[MAX_SQL_LENGTH + 1] = ""; int iMaxID; CHAR chMaxID[10] = {0}; GetMaxID("t_summary_log", "id", chMaxID); if( 0 == atoi(chMaxID) ) { iMaxID = 1; } else { iMaxID = atoi(chMaxID) + 1; } sprintf(strSQLText, "insert into t_summary_log(devname, happentime," \ "memos, id, type_desc, curr_value, varuid, varname) values(" \ "\'%s\', \'%s\', \'%s\', %d, \'%s\', %.1f, \'%s\', \'%s\')", pDevName, pHappenTime, pMemo, iMaxID, pVarDesc, dbCurrValue, pVarUid, pVarName); //LOG4C((LOG_NOTICE, "%s", strSQLText)); return CDBConnection::GetInstancePtr()->Execute(strSQLText); } //更新Summary记录 INT CDBInterface::EditSummaryRecord( CHAR *pDevName, // 设备名称 CHAR *pHappenTime, // 发生时间 CHAR* pMemo, // 备注 int iID, // ID CHAR* pVarDesc, // 变量描述 double dbCurrValue, // 当前值 CHAR* pVarUid, // 设备Uid CHAR* pVarName // 变量名称 ) { CHAR strSQLText[MAX_SQL_LENGTH + 1] = ""; sprintf(strSQLText, "update t_summary_log set devname = \'%s\', happentime = \'%s\'," \ "memos = \'%s\', type_desc = \'%s\', curr_value = %.1f, varuid = \'%s\', varname = \'%s\' where id = %d", pDevName, pHappenTime, pMemo, pVarDesc, dbCurrValue, pVarUid, pVarName, iID); return CDBConnection::GetInstancePtr()->Execute(strSQLText); } //更新Summary记录 INT CDBInterface::EditSummaryRecord( CHAR *pDevName, // 设备名称 CHAR *pHappenTime, // 发生时间 CHAR* pMemo, // 备注 CHAR* pVarDesc, // 变量描述 double dbCurrValue, // 当前值 CHAR* pVarUid, // 设备Uid CHAR* pVarName // 变量名称 ) { CHAR strSQLText[MAX_SQL_LENGTH + 1] = ""; sprintf(strSQLText, "update t_summary_log set devname = \'%s\', happentime = \'%s\'," \ "memos = \'%s\', type_desc = \'%s\', curr_value = %.1f, varuid = \'%s\', varname = \'%s\' where varname = \'%s\'", pDevName, pHappenTime, pMemo, pVarDesc, dbCurrValue, pVarUid, pVarName, pVarName); //LOG4C((LOG_NOTICE, "%s", strSQLText)); return CDBConnection::GetInstancePtr()->Execute(strSQLText); } };