DataImpl.cpp 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  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* pTagObj = new STModInfo();
  64. #ifndef USE_UTF8
  65. pTagObj->strName = pazResult[i*nCol + 0];
  66. pTagObj->strAddress = pazResult[i*nCol + 1];
  67. pTagObj->strVersion = pazResult[i*nCol + 2];
  68. #else
  69. // 由Native for SQLite3插入的数据,都是utf8格式;
  70. CharEncoding::UTF82ASCII(pazResult[i*nCol + 0], pTagObj->strName);
  71. CharEncoding::UTF82ASCII(pazResult[i*nCol + 1], pTagObj->strAddress);
  72. CharEncoding::UTF82ASCII(pazResult[i*nCol + 2], pTagObj->strVersion);
  73. #endif
  74. pTagObj->_check = false;
  75. vtModInfo.push_back(pTagObj);
  76. }
  77. sqlite3_free_table(pazResult);
  78. return nRow;
  79. }
  80. BOOL CDataImpl::InsertModInfo(IN STModInfo &stModInfo)
  81. {
  82. return InsertModInfo(stModInfo.strName.c_str(), stModInfo.strAddress.c_str(), stModInfo.strVersion.c_str());
  83. }
  84. BOOL CDataImpl::InsertModInfo(IN LPCSTR lpModName, IN LPCSTR lpModAddress, IN LPCSTR lpModVerion)
  85. {
  86. if ( lpModName == NULL || lpModName[0] == '\0' ||
  87. lpModAddress == NULL || lpModAddress[0] == '\0' ||
  88. lpModVerion == NULL || lpModVerion[0] == '\0' )
  89. {
  90. Global::WriteTextLog(_T("InsertModInfo:变量空!"));
  91. return FALSE;
  92. }
  93. if(m_psqlite3 == NULL)
  94. return FALSE;
  95. string strInsert = "INSERT INTO mod(mod_name,mod_addr,mod_ver) VALUES ('";
  96. #ifndef USE_UTF8
  97. strInsert.append(lpModName);
  98. strInsert.append("','");
  99. strInsert.append(lpModAddress);
  100. strInsert.append("','");
  101. strInsert.append(lpModVerion);
  102. strInsert.append("');");
  103. #else
  104. string str;
  105. CharEncoding::ASCII2UTF8(lpModName,str);
  106. strInsert.append(str);
  107. strInsert.append("','");
  108. CharEncoding::ASCII2UTF8(lpModAddress,str);
  109. strInsert.append(str);
  110. strInsert.append("','");
  111. CharEncoding::ASCII2UTF8(lpModVerion,str);
  112. strInsert.append(str);
  113. strInsert.append("');");
  114. #endif
  115. char* psqlite_error = NULL;
  116. int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
  117. if(SQLITE_OK != sqlite_error)
  118. {
  119. Global::WriteTextLog(_T("InsertModInfo:%s"), psqlite_error);
  120. return FALSE;
  121. }
  122. return TRUE;
  123. }
  124. BOOL CDataImpl::UpdateModInfo(IN STModInfo &stModInfo)
  125. {
  126. return UpdateModInfo(stModInfo.strName.c_str(), stModInfo.strAddress.c_str(), stModInfo.strVersion.c_str());
  127. }
  128. BOOL CDataImpl::UpdateModInfo(IN LPCSTR lpModName, IN LPCSTR lpModAddress, IN LPCSTR lpModVerion)
  129. {
  130. if (lpModName == NULL || lpModName[0] == '\0' ||
  131. lpModAddress == NULL || lpModAddress[0] == '\0' ||
  132. lpModVerion == NULL || lpModVerion[0] == '\0' )
  133. {
  134. Global::WriteTextLog(_T("UpdateContactsInfo:变量空!"));
  135. return FALSE;
  136. }
  137. if(m_psqlite3 == NULL)
  138. return FALSE;
  139. string strUpdate = "UPDATE mod SET mod_addr = '";
  140. #ifndef USE_UTF8
  141. strUpdate.append(lpModVerion);
  142. strUpdate.append("', mod_ver = '");
  143. strUpdate.append(lpModAddress);
  144. strUpdate.append("' WHERE mod_name = '");
  145. strUpdate.append(lpModName);
  146. strUpdate.append("';");
  147. #else
  148. string str;
  149. CharEncoding::ASCII2UTF8(lpModVerion,str);
  150. strUpdate.append(str);
  151. strUpdate.append("', mod_ver = '");
  152. CharEncoding::ASCII2UTF8(lpModAddress,str);
  153. strUpdate.append(str);
  154. strUpdate.append("' WHERE mod_name = '");
  155. strUpdate.append(lpModName);
  156. strUpdate.append("';");
  157. #endif
  158. char* psqlite_error = NULL;
  159. int sqlite_error = sqlite3_exec(m_psqlite3, strUpdate.c_str(), NULL, 0, &psqlite_error);
  160. if(SQLITE_OK != sqlite_error)
  161. {
  162. Global::WriteTextLog(_T("UpdateModInfo:%s"), psqlite_error);
  163. return FALSE;
  164. }
  165. return TRUE;
  166. }
  167. BOOL CDataImpl::DeleteModInfo(IN STModInfo &stModInfo)
  168. {
  169. return DeleteModInfo(stModInfo.strName.c_str());
  170. }
  171. BOOL CDataImpl::DeleteModInfo(IN LPCSTR lpModName)
  172. {
  173. if (lpModName == NULL || lpModName[0] == '\0' )
  174. {
  175. Global::WriteTextLog(_T("DeleteModInfo:变量空!"));
  176. return FALSE;
  177. }
  178. if (m_psqlite3 == NULL)
  179. return FALSE;
  180. string strDelete = "DELETE FROM mod WHERE mod_name ='";
  181. strDelete.append(lpModName);
  182. strDelete.append("';");
  183. char* psqlite_error = NULL;
  184. int sqlite_error = sqlite3_exec(m_psqlite3, strDelete.c_str(), NULL, 0, &psqlite_error);
  185. if (SQLITE_OK != sqlite_error)
  186. {
  187. Global::WriteTextLog(_T("DeleteModInfo:%s"), psqlite_error);
  188. return FALSE;
  189. }
  190. return TRUE;
  191. }