#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 &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; }