DataImpl.cpp 5.7 KB

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