123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- #include "StdAfx.h"
- #include "DataImpl.h"
- #define DBCREATE _T("CREATE TABLE \"mod\" (\
- \"mod_name\" TEXT NOT NULL,\
- \"mod_addr\" TEXT NOT NULL,\
- \"mod_ver\" TEXT NOT NULL,\
- PRIMARY KEY (\"mod_name\")\
- );")
- CDataImpl::CDataImpl(void):m_psqlite3(NULL),m_pszErrmsg(NULL)
- {
- }
- CDataImpl::~CDataImpl(void)
- {
- }
- BOOL CDataImpl::Open()
- {
- Close();
- CHAR szpath[MAX_PATH] = {0};
- _stprintf_s(szpath, _T("%ssvn.db"), Global::g_szModulePath );
- bool bCreate = false;
- if ( !PathFileExists(szpath) )
- bCreate = true;
- string strPath;
- if ( !CharEncoding::ASCII2UTF8(szpath,strPath))
- {
- return FALSE;
- }
- INT nResult = sqlite3_open(strPath.c_str(), &m_psqlite3);
- if ( nResult != SQLITE_OK )
- return FALSE;
- if ( bCreate )
- ExecteSQL(DBCREATE);
- return TRUE;
- }
- void CDataImpl::Close()
- {
- if ( m_psqlite3 )
- sqlite3_close(m_psqlite3);
- m_psqlite3 = NULL;
- }
- BOOL CDataImpl::ExecteSQL(IN LPCSTR lpSQL)
- {
- if ( lpSQL == NULL || lpSQL[0] == '\0' )
- {
- Global::WriteTextLog(_T("ExecteSQL:执行语句空!"));
- return FALSE;
- }
- if(m_psqlite3 == NULL)
- return FALSE;
- char* psqlite_error = NULL;
- int sqlite_error = sqlite3_exec(m_psqlite3, lpSQL, NULL, 0, &psqlite_error);
- if(SQLITE_OK != sqlite_error)
- {
- Global::WriteTextLog(_T("ExecteSQL:%s"), psqlite_error);
- return FALSE;
- }
- return TRUE;
- }
- INT CDataImpl::QueryModInfo(IN OUT std::vector<STModInfo*> &vtModInfo)
- {
- if ( m_psqlite3 == NULL )
- return -1;
- INT nRow = 0;
- INT nCol = 0;
- char** pazResult = NULL;
- int sqlite_error = sqlite3_get_table(m_psqlite3, "select mod_name, mod_addr, mod_ver from mod", &pazResult, &nRow, &nCol, &m_pszErrmsg);
- if ( sqlite_error != SQLITE_OK)
- {
- Global::WriteTextLog(_T("QueryModInfo:%s"), m_pszErrmsg);
- return -1;
- }
- for(int i = 1; i <= nRow; i++)
- {
- STModInfo* pTagObj = new STModInfo();
- #ifndef USE_UTF8
- pTagObj->strName = pazResult[i*nCol + 0];
- pTagObj->strAddress = pazResult[i*nCol + 1];
- pTagObj->strVersion = pazResult[i*nCol + 2];
- #else
- // 由Native for SQLite3插入的数据,都是utf8格式;
- CharEncoding::UTF82ASCII(pazResult[i*nCol + 0], pTagObj->strName);
- CharEncoding::UTF82ASCII(pazResult[i*nCol + 1], pTagObj->strAddress);
- CharEncoding::UTF82ASCII(pazResult[i*nCol + 2], pTagObj->strVersion);
- #endif
- pTagObj->_check = false;
- vtModInfo.push_back(pTagObj);
- }
- sqlite3_free_table(pazResult);
- return nRow;
- }
- BOOL CDataImpl::InsertModInfo(IN STModInfo &stModInfo)
- {
- return InsertModInfo(stModInfo.strName.c_str(), stModInfo.strAddress.c_str(), stModInfo.strVersion.c_str());
- }
- BOOL CDataImpl::InsertModInfo(IN LPCSTR lpModName, IN LPCSTR lpModAddress, IN LPCSTR lpModVerion)
- {
- if ( lpModName == NULL || lpModName[0] == '\0' ||
- lpModAddress == NULL || lpModAddress[0] == '\0' ||
- lpModVerion == NULL || lpModVerion[0] == '\0' )
- {
- Global::WriteTextLog(_T("InsertModInfo:变量空!"));
- return FALSE;
- }
- if(m_psqlite3 == NULL)
- return FALSE;
- string strInsert = "INSERT INTO mod(mod_name,mod_addr,mod_ver) VALUES ('";
- #ifndef USE_UTF8
- strInsert.append(lpModName);
- strInsert.append("','");
- strInsert.append(lpModAddress);
- strInsert.append("','");
- strInsert.append(lpModVerion);
- strInsert.append("');");
- #else
- string str;
- CharEncoding::ASCII2UTF8(lpModName,str);
- strInsert.append(str);
- strInsert.append("','");
- CharEncoding::ASCII2UTF8(lpModAddress,str);
- strInsert.append(str);
- strInsert.append("','");
- CharEncoding::ASCII2UTF8(lpModVerion,str);
- strInsert.append(str);
- strInsert.append("');");
- #endif
- char* psqlite_error = NULL;
- int sqlite_error = sqlite3_exec(m_psqlite3, strInsert.c_str(), NULL, 0, &psqlite_error);
- if(SQLITE_OK != sqlite_error)
- {
- Global::WriteTextLog(_T("InsertModInfo:%s"), psqlite_error);
- return FALSE;
- }
- return TRUE;
- }
- BOOL CDataImpl::UpdateModInfo(IN STModInfo &stModInfo)
- {
- return UpdateModInfo(stModInfo.strName.c_str(), stModInfo.strAddress.c_str(), stModInfo.strVersion.c_str());
- }
- BOOL CDataImpl::UpdateModInfo(IN LPCSTR lpModName, IN LPCSTR lpModAddress, IN LPCSTR lpModVerion)
- {
- if (lpModName == NULL || lpModName[0] == '\0' ||
- lpModAddress == NULL || lpModAddress[0] == '\0' ||
- lpModVerion == NULL || lpModVerion[0] == '\0' )
- {
- Global::WriteTextLog(_T("UpdateContactsInfo:变量空!"));
- return FALSE;
- }
- if(m_psqlite3 == NULL)
- return FALSE;
- string strUpdate = "UPDATE mod SET mod_addr = '";
- #ifndef USE_UTF8
- strUpdate.append(lpModVerion);
- strUpdate.append("', mod_ver = '");
- strUpdate.append(lpModAddress);
- strUpdate.append("' WHERE mod_name = '");
- strUpdate.append(lpModName);
- strUpdate.append("';");
- #else
- string str;
- CharEncoding::ASCII2UTF8(lpModVerion,str);
- strUpdate.append(str);
- strUpdate.append("', mod_ver = '");
- CharEncoding::ASCII2UTF8(lpModAddress,str);
- strUpdate.append(str);
- strUpdate.append("' WHERE mod_name = '");
- strUpdate.append(lpModName);
- strUpdate.append("';");
- #endif
- char* psqlite_error = NULL;
- int sqlite_error = sqlite3_exec(m_psqlite3, strUpdate.c_str(), NULL, 0, &psqlite_error);
- if(SQLITE_OK != sqlite_error)
- {
- Global::WriteTextLog(_T("UpdateModInfo:%s"), psqlite_error);
- return FALSE;
- }
- return TRUE;
- }
- BOOL CDataImpl::DeleteModInfo(IN STModInfo &stModInfo)
- {
- return DeleteModInfo(stModInfo.strName.c_str());
- }
- BOOL CDataImpl::DeleteModInfo(IN LPCSTR lpModName)
- {
- if (lpModName == NULL || lpModName[0] == '\0' )
- {
- Global::WriteTextLog(_T("DeleteModInfo:变量空!"));
- return FALSE;
- }
- if (m_psqlite3 == NULL)
- return FALSE;
- string strDelete = "DELETE FROM mod WHERE mod_name ='";
- strDelete.append(lpModName);
- strDelete.append("';");
- char* psqlite_error = NULL;
- int sqlite_error = sqlite3_exec(m_psqlite3, strDelete.c_str(), NULL, 0, &psqlite_error);
- if (SQLITE_OK != sqlite_error)
- {
- Global::WriteTextLog(_T("DeleteModInfo:%s"), psqlite_error);
- return FALSE;
- }
- return TRUE;
- }
|