DataImpl.cpp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. #include "StdAfx.h"
  2. #include "DataImpl.h"
  3. CDataImpl::CDataImpl(void):m_psqlite3(NULL),m_pszErrmsg(NULL)
  4. {
  5. }
  6. CDataImpl::~CDataImpl(void)
  7. {
  8. }
  9. BOOL CDataImpl::Open()
  10. {
  11. Close();
  12. CHAR szpath[MAX_PATH] = {0};
  13. _stprintf_s(szpath, _T("%ssvn.db"), Global::g_szModulePath );
  14. string strPath;
  15. if ( !CharEncoding::ASCII2UTF8(szpath,strPath))
  16. {
  17. return FALSE;
  18. }
  19. INT nResult = sqlite3_open(strPath.c_str(), &m_psqlite3);
  20. if ( nResult != SQLITE_OK )
  21. return FALSE;
  22. return TRUE;
  23. }
  24. void CDataImpl::Close()
  25. {
  26. if ( m_psqlite3 )
  27. sqlite3_close(m_psqlite3);
  28. m_psqlite3 = NULL;
  29. }
  30. BOOL CDataImpl::ExecteSQL(IN LPCSTR lpSQL)
  31. {
  32. if ( lpSQL == NULL || lpSQL[0] == '\0' )
  33. {
  34. Global::WriteTextLog(_T("ExecteSQL:执行语句空!"));
  35. return FALSE;
  36. }
  37. if(m_psqlite3 == NULL)
  38. return FALSE;
  39. char* psqlite_error = NULL;
  40. int sqlite_error = sqlite3_exec(m_psqlite3, lpSQL, NULL, 0, &psqlite_error);
  41. if(SQLITE_OK != sqlite_error)
  42. {
  43. Global::WriteTextLog(_T("ExecteSQL:%s"), psqlite_error);
  44. return FALSE;
  45. }
  46. return TRUE;
  47. }
  48. INT CDataImpl::QueryModInfo(IN OUT std::vector<STModInfo> &vtModInfo)
  49. {
  50. if ( m_psqlite3 == NULL )
  51. return -1;
  52. INT nRow = 0;
  53. INT nCol = 0;
  54. char** pazResult = NULL;
  55. int sqlite_error = sqlite3_get_table(m_psqlite3, "select mod_name, mod_addr, mod_ver from mod", &pazResult, &nRow, &nCol, &m_pszErrmsg);
  56. if ( sqlite_error != SQLITE_OK)
  57. {
  58. Global::WriteTextLog(_T("QueryModInfo:%s"), m_pszErrmsg);
  59. return -1;
  60. }
  61. for(int i = 1; i <= nRow; i++)
  62. {
  63. STModInfo tagObj;
  64. #ifndef USE_UTF8
  65. tagObj.strName = pazResult[i*nCol + 0];
  66. tagObj.strAddress = pazResult[i*nCol + 1];
  67. tagObj.strVersion = pazResult[i*nCol + 2];
  68. #else
  69. // 由Native for SQLite3插入的数据,都是utf8格式;
  70. CharEncoding::UTF82ASCII(pazResult[i*nCol + 0], tagObj.strName);
  71. CharEncoding::UTF82ASCII(pazResult[i*nCol + 1], tagObj.strAddress);
  72. CharEncoding::UTF82ASCII(pazResult[i*nCol + 2], tagObj.strVersion);
  73. #endif
  74. vtModInfo.push_back(tagObj);
  75. }
  76. sqlite3_free_table(pazResult);
  77. return nRow;
  78. }
  79. BOOL CDataImpl::InsertModInfo(IN STModInfo &stModInfo)
  80. {
  81. return InsertModInfo(stModInfo.strName.c_str(), stModInfo.strAddress.c_str(), stModInfo.strVersion.c_str());
  82. }
  83. BOOL CDataImpl::InsertModInfo(IN LPCSTR lpModName, IN LPCSTR lpModAddress, IN LPCSTR lpModVerion)
  84. {
  85. if ( lpModName == NULL || lpModName[0] == '\0' ||
  86. lpModAddress == NULL || lpModAddress[0] == '\0' ||
  87. lpModVerion == NULL || lpModVerion[0] == '\0' )
  88. {
  89. Global::WriteTextLog(_T("InsertModInfo:变量空!"));
  90. return FALSE;
  91. }
  92. if(m_psqlite3 == NULL)
  93. return FALSE;
  94. string strInsert = "INSERT INTO mod(mod_name,mod_addr,mod_ver) VALUES ('";
  95. #ifndef USE_UTF8
  96. strInsert.append(lpModName);
  97. strInsert.append("','");
  98. strInsert.append(lpModAddress);
  99. strInsert.append("','");
  100. strInsert.append(lpModVerion);
  101. strInsert.append("');");
  102. #else
  103. string str;
  104. CharEncoding::ASCII2UTF8(lpModName,str);
  105. strInsert.append(str);
  106. strInsert.append("','");
  107. CharEncoding::ASCII2UTF8(lpModAddress,str);
  108. strInsert.append(str);
  109. strInsert.append("','");
  110. CharEncoding::ASCII2UTF8(lpModVerion,str);
  111. strInsert.append(str);
  112. strInsert.append("');");
  113. #endif
  114. char* psqlite_error = NULL;
  115. int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
  116. if(SQLITE_OK != sqlite_error)
  117. {
  118. Global::WriteTextLog(_T("InsertModInfo:%s"), psqlite_error);
  119. return FALSE;
  120. }
  121. return TRUE;
  122. }
  123. BOOL CDataImpl::UpdateModInfo(IN STModInfo &stModInfo)
  124. {
  125. return UpdateModInfo(stModInfo.strName.c_str(), stModInfo.strAddress.c_str(), stModInfo.strVersion.c_str());
  126. }
  127. BOOL CDataImpl::UpdateModInfo(IN LPCSTR lpModName, IN LPCSTR lpModAddress, IN LPCSTR lpModVerion)
  128. {
  129. if (lpModName == NULL || lpModName[0] == '\0' ||
  130. lpModAddress == NULL || lpModAddress[0] == '\0' ||
  131. lpModVerion == NULL || lpModVerion[0] == '\0' )
  132. {
  133. Global::WriteTextLog(_T("UpdateContactsInfo:变量空!"));
  134. return FALSE;
  135. }
  136. if(m_psqlite3 == NULL)
  137. return FALSE;
  138. string strUpdate = "UPDATE mod SET mod_addr = '";
  139. #ifndef USE_UTF8
  140. strUpdate.append(lpModVerion);
  141. strUpdate.append("', mod_ver = '");
  142. strUpdate.append(lpModAddress);
  143. strUpdate.append("' WHERE mod_name = '");
  144. strUpdate.append(lpModName);
  145. strUpdate.append("';");
  146. #else
  147. string str;
  148. CharEncoding::ASCII2UTF8(lpModVerion,str);
  149. strUpdate.append(str);
  150. strUpdate.append("', mod_ver = '");
  151. CharEncoding::ASCII2UTF8(lpModAddress,str);
  152. strUpdate.append(str);
  153. strUpdate.append("' WHERE mod_name = '");
  154. strUpdate.append(lpModName);
  155. strUpdate.append("';");
  156. #endif
  157. char* psqlite_error = NULL;
  158. int sqlite_error = sqlite3_exec(m_psqlite3, strUpdate.c_str(), NULL, 0, &psqlite_error);
  159. if(SQLITE_OK != sqlite_error)
  160. {
  161. Global::WriteTextLog(_T("UpdateModInfo:%s"), psqlite_error);
  162. return FALSE;
  163. }
  164. return TRUE;
  165. }
  166. BOOL CDataImpl::DeleteModInfo(IN STModInfo &stModInfo)
  167. {
  168. return DeleteModInfo(stModInfo.strName.c_str());
  169. }
  170. BOOL CDataImpl::DeleteModInfo(IN LPCSTR lpModName)
  171. {
  172. if (lpModName == NULL || lpModName[0] == '\0' )
  173. {
  174. Global::WriteTextLog(_T("DeleteModInfo:变量空!"));
  175. return FALSE;
  176. }
  177. if (m_psqlite3 == NULL)
  178. return FALSE;
  179. string strDelete = "DELETE FROM mod WHERE mod_name ='";
  180. strDelete.append(lpModName);
  181. strDelete.append("';");
  182. char* psqlite_error = NULL;
  183. int sqlite_error = sqlite3_exec(m_psqlite3, strDelete.c_str(), NULL, 0, &psqlite_error);
  184. if (SQLITE_OK != sqlite_error)
  185. {
  186. Global::WriteTextLog(_T("DeleteModInfo:%s"), psqlite_error);
  187. return FALSE;
  188. }
  189. return TRUE;
  190. }