Bladeren bron

1、新增Database数据处理类;
2、完善部分示例代码;

sat23 4 jaren geleden
bovenliggende
commit
b869d5c379

+ 26 - 4
CTSManager/CTSManager/CTSManager.cpp

@@ -21,6 +21,8 @@
 #define _STR_USER_		"root"
 #define _STR_USER_		"root"
 #define _STR_PASSWD_	"Root@123"
 #define _STR_PASSWD_	"Root@123"
 #define _STR_DBNAME_	"scbc_cts"
 #define _STR_DBNAME_	"scbc_cts"
+
+#include "Database.h"
 // CCTSManagerApp
 // CCTSManagerApp
 
 
 BEGIN_MESSAGE_MAP(CCTSManagerApp, CWinAppEx)
 BEGIN_MESSAGE_MAP(CCTSManagerApp, CWinAppEx)
@@ -78,11 +80,11 @@ BOOL CCTSManagerApp::InitInstance()
 	CWinAppEx::InitInstance();
 	CWinAppEx::InitInstance();
 
 
 
 
-#if 1
-	// 如果要多线程使用,必须在线程开始处调用;
-	mysql_thread_init();
+#if 0 // 用例演示;
 	// 创建mysql对象;
 	// 创建mysql对象;
 	MYSQL* pConn = mysql_init(NULL); // 会调用mysql_library_init;
 	MYSQL* pConn = mysql_init(NULL); // 会调用mysql_library_init;
+	// 如果要多线程使用,必须在线程开始处调用;
+	mysql_thread_init(); //在mysql_init后调用;
 	const char* perr = mysql_error(pConn);
 	const char* perr = mysql_error(pConn);
 	if (pConn) {
 	if (pConn) {
 		// 创建连接;
 		// 创建连接;
@@ -102,7 +104,8 @@ BOOL CCTSManagerApp::InitInstance()
 				// 打印行数据;
 				// 打印行数据;
 				while ((row = mysql_fetch_row(pres))) {
 				while ((row = mysql_fetch_row(pres))) {
 					for (unsigned int i = 0; i < rlen; i++) {
 					for (unsigned int i = 0; i < rlen; i++) {
-						//TRACE0("%s\n", row[i]);
+						OutputDebugString(mysql_fetch_field(pres)->name);
+						OutputDebugString("=");
 						OutputDebugString(row[i]);
 						OutputDebugString(row[i]);
 						OutputDebugString("\n");
 						OutputDebugString("\n");
 					}
 					}
@@ -123,6 +126,25 @@ BOOL CCTSManagerApp::InitInstance()
 	mysql_library_end();
 	mysql_library_end();
 #endif
 #endif
 
 
+#ifdef _DEBUG
+	CDatabase db;
+	if (db.Init(_STR_HOST_, _STR_USER_, _STR_PASSWD_, _STR_DBNAME_))
+	{
+		db.InserProvider(_T("RealTealk"), _T("RTK台湾"));
+		db.InserProvider(_T("RealTealk2"), _T("RTK台湾"));
+		std::vector<STProvider> vtprovider;
+		db.QueryProvider(vtprovider);
+
+		for (std::vector<STProvider>::iterator it = vtprovider.begin(); it != vtprovider.end(); it++ ) {
+			TRACE2(_T("name=%s, note=%s\n"), it->name.c_str(), it->note.c_str());
+
+			//(*it).note = _T("aaaaaa");
+			it->note = _T("xxxx1111xxx");
+			db.UpdateProvider(it->name, *it);
+		}
+	}
+#endif
+
 	// 初始化 OLE 库
 	// 初始化 OLE 库
 	if (!AfxOleInit())
 	if (!AfxOleInit())
 	{
 	{

+ 2 - 0
CTSManager/CTSManager/CTSManager.vcxproj

@@ -199,6 +199,7 @@
     <ClInclude Include="CTSManager.h" />
     <ClInclude Include="CTSManager.h" />
     <ClInclude Include="CTSManagerDoc.h" />
     <ClInclude Include="CTSManagerDoc.h" />
     <ClInclude Include="CTSManagerView.h" />
     <ClInclude Include="CTSManagerView.h" />
+    <ClInclude Include="Database.h" />
     <ClInclude Include="FileView.h" />
     <ClInclude Include="FileView.h" />
     <ClInclude Include="framework.h" />
     <ClInclude Include="framework.h" />
     <ClInclude Include="MainFrm.h" />
     <ClInclude Include="MainFrm.h" />
@@ -217,6 +218,7 @@
     <ClCompile Include="CTSManager.cpp" />
     <ClCompile Include="CTSManager.cpp" />
     <ClCompile Include="CTSManagerDoc.cpp" />
     <ClCompile Include="CTSManagerDoc.cpp" />
     <ClCompile Include="CTSManagerView.cpp" />
     <ClCompile Include="CTSManagerView.cpp" />
+    <ClCompile Include="Database.cpp" />
     <ClCompile Include="FileView.cpp" />
     <ClCompile Include="FileView.cpp" />
     <ClCompile Include="MainFrm.cpp" />
     <ClCompile Include="MainFrm.cpp" />
     <ClCompile Include="OutputWnd.cpp" />
     <ClCompile Include="OutputWnd.cpp" />

+ 6 - 0
CTSManager/CTSManager/CTSManager.vcxproj.filters

@@ -66,6 +66,9 @@
     <ClInclude Include="table.h">
     <ClInclude Include="table.h">
       <Filter>sql</Filter>
       <Filter>sql</Filter>
     </ClInclude>
     </ClInclude>
+    <ClInclude Include="Database.h">
+      <Filter>sql</Filter>
+    </ClInclude>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClCompile Include="CTSManager.cpp">
     <ClCompile Include="CTSManager.cpp">
@@ -104,6 +107,9 @@
     <ClCompile Include="pch.cpp">
     <ClCompile Include="pch.cpp">
       <Filter>源文件</Filter>
       <Filter>源文件</Filter>
     </ClCompile>
     </ClCompile>
+    <ClCompile Include="Database.cpp">
+      <Filter>sql</Filter>
+    </ClCompile>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="CTSManager.rc">
     <ResourceCompile Include="CTSManager.rc">

+ 278 - 0
CTSManager/CTSManager/Database.cpp

@@ -0,0 +1,278 @@
+#include "pch.h"
+#include "Database.h"
+
+#define CHECKDB if (m_pConn == NULL || !m_bConnected) return FALSE
+
+CDatabase::CDatabase():m_pConn(NULL), m_pError(NULL), m_bConnected(FALSE)
+{
+	m_pConn = mysql_init(NULL);
+}
+
+CDatabase::~CDatabase()
+{
+	mysql_close(m_pConn);
+	mysql_library_end();
+}
+
+BOOL CDatabase::Init(std::string host, std::string user, std::string password, std::string db)
+{
+	if (!m_pConn)
+		return FALSE;
+
+	m_pError = mysql_error(m_pConn);
+	if (!mysql_real_connect(m_pConn, host.c_str(), user.c_str(), password.c_str(), db.c_str(), 0, NULL, 0)) {
+#ifdef _DEBUG
+		TRACE1(_T("mysql_real_connect error=%s\n"), m_pError ? m_pError: "");
+#endif
+		return FALSE;
+	}
+
+	return m_bConnected = TRUE;
+}
+
+BOOL CDatabase::ExcuteSQL(std::string sql)
+{
+	if (m_pConn == NULL || !m_bConnected)
+		return FALSE;
+
+	if (0 != mysql_query(m_pConn, sql.c_str())) {
+#ifdef _DEBUG
+		TRACE1(_T("ExcuteSQL error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+BOOL CDatabase::InserProvider(const STProvider& provider)
+{
+	CHECKDB;
+	TCHAR szSql[MAX_PATH] = {0};
+	_stprintf_s(szSql, INSER_PROVIDER, provider.name.c_str(), provider.note.c_str());
+	if (0 != mysql_query(m_pConn, szSql)) {
+#ifdef _DEBUG
+		TRACE1(_T("InserProvider error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+BOOL CDatabase::InserProvider(std::string name, std::string note)
+{
+	CHECKDB;
+	TCHAR szSql[MAX_PATH] = { 0 };
+	_stprintf_s(szSql, INSER_PROVIDER, name.c_str(), note.c_str());
+	if (0 != mysql_query(m_pConn, szSql)) {
+#ifdef _DEBUG
+		TRACE1(_T("InserProvider error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+BOOL CDatabase::DeleteProvider(std::string name)
+{
+	CHECKDB;
+	TCHAR szSql[MAX_PATH] = { 0 };
+	_stprintf_s(szSql, DEL_PROVIDER, name.c_str());
+	if (0 != mysql_query(m_pConn, szSql)) {
+#ifdef _DEBUG
+		TRACE1(_T("DeleteProvider error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+BOOL CDatabase::UpdateProvider(std::string name, const STProvider& provider)
+{
+	CHECKDB;
+	TCHAR szSql[MAX_PATH] = { 0 };
+	_stprintf_s(szSql, MOD_PROVIDER, provider.name.c_str(), provider.note.c_str(), name.c_str());
+	if (0 != mysql_query(m_pConn, szSql)) {
+#ifdef _DEBUG
+		TRACE1(_T("DeleteProvider error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+BOOL CDatabase::QueryProvider(std::vector<STProvider>& vtProvider)
+{
+	CHECKDB;
+	if (0 != mysql_query(m_pConn, QUERY_PROVIDER)) {
+#ifdef _DEBUG
+		TRACE1(_T("QueryProvider error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	// 获取表数据;
+	MYSQL_RES* pData = mysql_store_result(m_pConn);
+	if ( pData == NULL ) {
+#ifdef _DEBUG
+		TRACE1(_T("QueryProvider error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+#ifdef _DEBUG
+	// 统计表字段;
+	unsigned int nLen = mysql_num_fields(pData);
+	// 字段长度是否一致;
+	if (nLen != 2) {
+		mysql_free_result(pData);
+		return FALSE;
+	}
+
+	// 打印出字段名称;
+	TCHAR szLog[MAX_PATH] = {0};
+	for ( int i = 0; i < nLen; i++ ) {
+		_stprintf_s(szLog, _T("字段名称:%s\n"), mysql_fetch_field(pData)->name);
+		OutputDebugString(szLog);
+	}
+#endif
+
+	// 遍历数据;
+	MYSQL_ROW row;
+	while ( (row = mysql_fetch_row(pData)) != NULL ) {
+		STProvider provider;
+		provider.name = row[0];
+		provider.note = row[1];
+		vtProvider.push_back(provider);
+	}
+
+	// 释放内存;
+	mysql_free_result(pData);
+
+	return TRUE;
+}
+
+
+BOOL CDatabase::InsertBrand(const STBranch& brand)
+{
+	CHECKDB;
+	TCHAR szSql[MAX_PATH] = { 0 };
+	_stprintf_s(szSql, INSER_BRAND, brand.name.c_str(), brand.note.c_str());
+	if (0 != mysql_query(m_pConn, szSql)) {
+#ifdef _DEBUG
+		TRACE1(_T("InserProvider error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+BOOL CDatabase::InsertBrand(std::string name, std::string note)
+{
+	CHECKDB;
+	TCHAR szSql[MAX_PATH] = { 0 };
+	_stprintf_s(szSql, INSER_BRAND, name.c_str(), note.c_str());
+	if (0 != mysql_query(m_pConn, szSql)) {
+#ifdef _DEBUG
+		TRACE1(_T("InserProvider error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+BOOL CDatabase::DeleteBrand(std::string name)
+{
+	CHECKDB;
+	TCHAR szSql[MAX_PATH] = { 0 };
+	_stprintf_s(szSql, DEL_BRAND, name.c_str());
+	if (0 != mysql_query(m_pConn, szSql)) {
+#ifdef _DEBUG
+		TRACE1(_T("DeleteProvider error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+BOOL CDatabase::UpdateBrand(std::string name, const STBranch& brand)
+{
+	CHECKDB;
+	TCHAR szSql[MAX_PATH] = { 0 };
+	_stprintf_s(szSql, MOD_BRAND, name.c_str(), brand.name.c_str(), brand.note.c_str());
+	if (0 != mysql_query(m_pConn, szSql)) {
+#ifdef _DEBUG
+		TRACE1(_T("DeleteProvider error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+BOOL CDatabase::InsertQuarter(const STQuarter& quarter)
+{
+	CHECKDB;
+	TCHAR szSql[MAX_PATH] = { 0 };
+	_stprintf_s(szSql, INSER_QUARTER, quarter.name.c_str(), quarter.scp.c_str(), quarter.note.c_str());
+	if (0 != mysql_query(m_pConn, szSql)) {
+#ifdef _DEBUG
+		TRACE1(_T("InserProvider error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+BOOL CDatabase::InsertQuarter(std::string name, std::string scp, std::string note)
+{
+	CHECKDB;
+	TCHAR szSql[MAX_PATH] = { 0 };
+	_stprintf_s(szSql, INSER_QUARTER, name.c_str(), scp.c_str(), note.c_str());
+	if (0 != mysql_query(m_pConn, szSql)) {
+#ifdef _DEBUG
+		TRACE1(_T("InserProvider error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+BOOL CDatabase::DeleteQuarter(std::string name)
+{
+	CHECKDB;
+	TCHAR szSql[MAX_PATH] = { 0 };
+	_stprintf_s(szSql, DEL_QUARTER, name.c_str());
+	if (0 != mysql_query(m_pConn, szSql)) {
+#ifdef _DEBUG
+		TRACE1(_T("DeleteProvider error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+BOOL CDatabase::UpdateQuarter(std::string name, const STQuarter& quarter)
+{
+	CHECKDB;
+	TCHAR szSql[MAX_PATH] = { 0 };
+	_stprintf_s(szSql, MOD_QUARTER, name.c_str(), quarter.name.c_str(), quarter.scp.c_str(), quarter.note.c_str());
+	if (0 != mysql_query(m_pConn, szSql)) {
+#ifdef _DEBUG
+		TRACE1(_T("DeleteProvider error=%s\n"), m_pError ? m_pError : "");
+#endif
+		return FALSE;
+	}
+
+	return TRUE;
+}

+ 49 - 0
CTSManager/CTSManager/Database.h

@@ -0,0 +1,49 @@
+
+#ifndef __DATABASE_20201102__
+#define __DATABASE_20201102__
+
+#pragma once
+#include "table.h"
+
+class CDatabase
+{
+public:
+	CDatabase();
+	~CDatabase();
+protected:
+
+private:
+	MYSQL* m_pConn;
+	BOOL m_bConnected;
+	const char* m_pError;
+	std::string m_strUser;
+	std::string m_strPassword;
+	std::string m_strHost;
+
+public:
+	// ³õʼ»¯Á¬½Ó;
+	BOOL Init(std::string host, std::string user, std::string password, std::string db);
+	// Ö´ÐÐÓï¾ä;
+	BOOL ExcuteSQL(std::string sql);
+
+	// ¹©Ó¦É̱í;
+	BOOL InserProvider(const STProvider& provider);
+	BOOL InserProvider(std::string name, std::string note);
+	BOOL DeleteProvider(std::string name);
+	BOOL UpdateProvider(std::string name, const STProvider &provider);
+	BOOL QueryProvider(std::vector<STProvider>& vtProvider);
+
+	// Æ·ÅÆ±í;
+	BOOL InsertBrand(const STBranch& brand);
+	BOOL InsertBrand(std::string name, std::string note);
+	BOOL DeleteBrand(std::string name);
+	BOOL UpdateBrand(std::string name, const STBranch& brand);
+
+	// ¼¾¶È±í;
+	BOOL InsertQuarter(const STQuarter& quarter);
+	BOOL InsertQuarter(std::string name, std::string scp, std::string note);
+	BOOL DeleteQuarter(std::string name);
+	BOOL UpdateQuarter(std::string name, const STQuarter& quarter);
+};
+
+#endif

+ 2 - 1
CTSManager/CTSManager/pch.h

@@ -11,5 +11,6 @@
 #include "framework.h"
 #include "framework.h"
 
 
 #include "mysql.h"
 #include "mysql.h"
-//#include <string>
+#include <string>
+#include <vector>
 #endif //PCH_H
 #endif //PCH_H

+ 13 - 1
CTSManager/CTSManager/table.h

@@ -11,9 +11,21 @@
 #define INSER_SERVER _T("INSERT INTO `server` (`name`,`ip`,`type`,`user`,`password`,`note`) VALUES ('%s', '%s', '%s', '%s', '%s', '%s');")
 #define INSER_SERVER _T("INSERT INTO `server` (`name`,`ip`,`type`,`user`,`password`,`note`) VALUES ('%s', '%s', '%s', '%s', '%s', '%s');")
 #define INSER_BRANCH _T("INSERT INTO `branch` (`name` ,`quarter`,`address`,`provider`,`chip`,`type`,`status`,`note`) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s');")
 #define INSER_BRANCH _T("INSERT INTO `branch` (`name` ,`quarter`,`address`,`provider`,`chip`,`type`,`status`,`note`) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s');")
 #define INSER_USER _T("INSERT INTO `user` (`user`,`password`,`permission`) VALUES ('%s', '%s', '%s');")
 #define INSER_USER _T("INSERT INTO `user` (`user`,`password`,`permission`) VALUES ('%s', '%s', '%s');")
-#define INSER_QBRANCH _T("INSERT INTO `qbranch` (`brand`,`quarter`,`whitelist`,`version`,`oemkey`,`approved`,`approveddate`,`fingerprint`,`builddate`,`gtvs`,`ftpdir`,`codedir`,`note`) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s');")
+#define INSER_QBRANCH _T("INSERT INTO `qbranch` \
+(`brand`,`quarter`,`whitelist`,`version`,`oemkey`,`approved`,`approveddate`,`fingerprint`,`builddate`,`gtvs`,`ftpdir`,`codedir`,`note`)\
+ VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s');")
 #define INSER_LOG _T("INSERT INTO `log` (`user`,`datetime`,`content`) VALUES ('%s', 'datetime', '%s');")
 #define INSER_LOG _T("INSERT INTO `log` (`user`,`datetime`,`content`) VALUES ('%s', 'datetime', '%s');")
 
 
+#define DEL_PROVIDER _T("DELETE FROM `provider` WHERE `name` = '%s';")
+#define DEL_BRAND _T("DELETE FROM `brand` WHERE `name` = '%s';")
+#define DEL_QUARTER _T("DELETE FROM `quarter` where `name` = '%s';")
+
+#define MOD_PROVIDER _T("UPDATE `provider` SET `name`='%s',`note`='%s' WHERE `name`='%s';")
+#define MOD_BRAND _T("UPDATE `brand` SET `name`='%s',`note`='%s' WHERE `name`='%s';")
+#define MOD_QUARTER _T("UPDATE `quarter` SET `name`='%s', `scp` = '%s' ,`note`='%s' WHERE `name`='%s';")
+
+#define QUERY_PROVIDER _T("SELECT `name`, `note` FROM `provider`;")
+
 // ¹©Ó¦É̱í;
 // ¹©Ó¦É̱í;
 typedef struct {
 typedef struct {
 	std::string name;						// ¹©Ó¦ÉÌÃû³Æ;
 	std::string name;						// ¹©Ó¦ÉÌÃû³Æ;