DBInterface.cpp 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. /*************************************************************
  2. /* Copyright (C), 2008-2010, StoneU Tech. Co., Ltd.
  3. /* 文件名: DBInterface.h
  4. /* 作者: Jesse
  5. /* 创建日期: 2010-08-02
  6. /* 版本号: V1.0
  7. /* 描述: 实现多种数据库的支持
  8. /* 其它:
  9. /* 主要类模块: CDBInterface
  10. /* 历史修改记录:
  11. 作者 时间 版本 描述
  12. Jesse 10/08/02 1.0 创建这个模块
  13. ***************************************************************/
  14. #include "stdafx.h"
  15. #include "DBInterface.h"
  16. #include "Global.h"
  17. namespace DBInterface
  18. {
  19. CDBInterface* CDBInterface::m_pDBInterface = NULL;
  20. // 静态成员函数,提供全局访问的接口
  21. CDBInterface* CDBInterface::GetInstancePtr()
  22. {
  23. if( NULL == m_pDBInterface )
  24. {
  25. m_pDBInterface = new CDBInterface();
  26. }
  27. return m_pDBInterface;
  28. }
  29. // 设置数据库类型
  30. void CDBInterface::SetDBType(char *pDBType)
  31. {
  32. strcpy(m_chDBType, pDBType);
  33. }
  34. //获取表最大的ID, 通用函数
  35. INT CDBInterface::GetMaxID( CHAR *pTableName, CHAR *pFieldName, CHAR *pMaxID )
  36. {
  37. CHAR strSQLText[MAX_SQL_LENGTH + 1] = "";
  38. list<string> list1;
  39. list<string>::iterator it;
  40. sprintf(strSQLText, "select max(%s) as maxid from %s", pFieldName, pTableName);
  41. int nRet = CDBConnection::GetInstancePtr()->GetFieldValueList1(strSQLText, list1);
  42. if( 0 == list1.size() )
  43. {
  44. return 0;
  45. }
  46. if( nRet != -1 )
  47. {
  48. strcpy(pMaxID, list1.begin()->c_str());
  49. }
  50. for( it = list1.begin(); it != list1.end(); )
  51. {
  52. list1.erase(it++);
  53. }
  54. return nRet;
  55. }
  56. // 获取Summary资料
  57. INT CDBInterface::GetSummaryInfo(char *pUid, char *pVarDesc, char *pID)
  58. {
  59. CHAR strSQLText[MAX_SQL_LENGTH + 1] = "";
  60. list<string> list1;
  61. list<string>::iterator it;
  62. if (!_stricmp(m_chDBType, "SQL SERVER"))
  63. {
  64. sprintf(strSQLText, "select top 1 id from t_summary_log where varuid = \'%s\' and varname = \'%s\'", pUid, pVarDesc);
  65. }
  66. else if (!_stricmp(m_chDBType, "ACCESS97"))
  67. {
  68. sprintf(strSQLText, "select top 1 id from t_summary_log where varuid = \'%s\' and varname = \'%s\'", pUid, pVarDesc);
  69. }
  70. else if (!_stricmp(m_chDBType, "ACCESS2000"))
  71. {
  72. sprintf(strSQLText, "select top 1 id from t_summary_log where varuid = \'%s\' and varname = \'%s\'", pUid, pVarDesc);
  73. }
  74. else if(!_stricmp(m_chDBType, "PGSQL"))
  75. {
  76. sprintf(strSQLText, "select id from t_summary_log where varuid = \'%s\' and varname = \'%s\' limit 1", pUid, pVarDesc);
  77. }
  78. int nRet = CDBConnection::GetInstancePtr()->GetFieldValueList1(strSQLText, list1);
  79. if( 0 == list1.size() )
  80. {
  81. return 0;
  82. }
  83. if( nRet != -1 )
  84. {
  85. strcpy(pID, list1.begin()->c_str());
  86. }
  87. for( it = list1.begin(); it != list1.end(); )
  88. {
  89. list1.erase(it++);
  90. }
  91. return nRet;
  92. }
  93. //插入Summary记录
  94. INT CDBInterface::InsertSummaryRecord(
  95. CHAR* pDevName, // 设备名称
  96. CHAR* pHappenTime, // 发生时间
  97. CHAR* pMemo, // 备注
  98. CHAR *pVarDesc, // 变量描述
  99. double dbCurrValue, // 当前值
  100. CHAR* pVarUid, // 设备Uid
  101. CHAR* pVarName // 变量名称
  102. )
  103. {
  104. CHAR strSQLText[MAX_SQL_LENGTH + 1] = "";
  105. int iMaxID;
  106. CHAR chMaxID[10] = {0};
  107. GetMaxID("t_summary_log", "id", chMaxID);
  108. if( 0 == atoi(chMaxID) )
  109. {
  110. iMaxID = 1;
  111. }
  112. else
  113. {
  114. iMaxID = atoi(chMaxID) + 1;
  115. }
  116. sprintf(strSQLText, "insert into t_summary_log(devname, happentime," \
  117. "memos, id, type_desc, curr_value, varuid, varname) values(" \
  118. "\'%s\', \'%s\', \'%s\', %d, \'%s\', %.1f, \'%s\', \'%s\')",
  119. pDevName, pHappenTime, pMemo, iMaxID, pVarDesc, dbCurrValue, pVarUid, pVarName);
  120. //LOG4C((LOG_NOTICE, "%s", strSQLText));
  121. return CDBConnection::GetInstancePtr()->Execute(strSQLText);
  122. }
  123. //更新Summary记录
  124. INT CDBInterface::EditSummaryRecord(
  125. CHAR *pDevName, // 设备名称
  126. CHAR *pHappenTime, // 发生时间
  127. CHAR* pMemo, // 备注
  128. int iID, // ID
  129. CHAR* pVarDesc, // 变量描述
  130. double dbCurrValue, // 当前值
  131. CHAR* pVarUid, // 设备Uid
  132. CHAR* pVarName // 变量名称
  133. )
  134. {
  135. CHAR strSQLText[MAX_SQL_LENGTH + 1] = "";
  136. sprintf(strSQLText, "update t_summary_log set devname = \'%s\', happentime = \'%s\'," \
  137. "memos = \'%s\', type_desc = \'%s\', curr_value = %.1f, varuid = \'%s\', varname = \'%s\' where id = %d",
  138. pDevName, pHappenTime, pMemo, pVarDesc, dbCurrValue, pVarUid, pVarName, iID);
  139. return CDBConnection::GetInstancePtr()->Execute(strSQLText);
  140. }
  141. //更新Summary记录
  142. INT CDBInterface::EditSummaryRecord(
  143. CHAR *pDevName, // 设备名称
  144. CHAR *pHappenTime, // 发生时间
  145. CHAR* pMemo, // 备注
  146. CHAR* pVarDesc, // 变量描述
  147. double dbCurrValue, // 当前值
  148. CHAR* pVarUid, // 设备Uid
  149. CHAR* pVarName // 变量名称
  150. )
  151. {
  152. CHAR strSQLText[MAX_SQL_LENGTH + 1] = "";
  153. sprintf(strSQLText, "update t_summary_log set devname = \'%s\', happentime = \'%s\'," \
  154. "memos = \'%s\', type_desc = \'%s\', curr_value = %.1f, varuid = \'%s\', varname = \'%s\' where varname = \'%s\'",
  155. pDevName, pHappenTime, pMemo, pVarDesc, dbCurrValue, pVarUid, pVarName, pVarName);
  156. //LOG4C((LOG_NOTICE, "%s", strSQLText));
  157. return CDBConnection::GetInstancePtr()->Execute(strSQLText);
  158. }
  159. };