亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? chatlogdb.cpp

?? SQlite 的使用 讀庫 寫庫
?? CPP
字號:
// ChatLogDB.cpp: implementation of the CChatLogDB class.
//
//////////////////////////////////////////////////////////////////////
//#include "stdafx.h"
#include "ChatLogDB.h"
#include "direct.h"
#include  <io.h>
#include <time.h>
const char STR_SYS_TABLE_CREATE[]		= "create table msgsystem(id integer primary key, msg blob, time integer);";
const char STR_NOM_TABLE_CREATE[]		= "create table msgnormal(id integer primary key, msg blob, time integer, channel integer, sender varchar(16), receiver varchar(16));";
const char STR_CONTACT_QUERY[]			= "select sender, receiver, time from msgnormal";
const char SQL_INSERT_SYSTEM_BIN[]		= "insert into msgsystem values(NULL, ?, %d)";
const char SQL_INSERT_NORMAL_BIN[]		= "insert into msgnormal values(NULL, ?, %d, %d, '%s', '%s')";
const char STR_DELETE_SYSTEM[]			= "delete from msgsystem where id = %d";
const char STR_DELETE_NORMAL[]			= "delete from msgnormal where id = %d";
const char SQL_SYSTEM_COUNT[]			= "select COUNT(id) from msgsystem";
const char SQL_NORMAL_COUNT[]			= "select COUNT(id) from msgnormal";
const char SQL_DELETE_NORMAL_BY_TIME[]	= "delete from msgnormal where time = %d";
const char SQL_DELETE_SYSTEM_BY_TIME[]	= "delete from msgsystem where time = %d";

const int ID_KEY = 0;
const int MSG_KEY = 1;
const int TIME_KEY = 2;
const int CHANNEL_KEY = 3;
const int SENDER_KEY = 4;
const int RECEIVER_KEY = 5;

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CChatLogDB::CChatLogDB()
{
	m_bConnected	= false;
	m_nAddLine		= 0;
	m_bLog			= true;
	m_lCurTime		= 0;
	m_bHeroLogin	= false;
	m_strCurPath	= "";
}	

CChatLogDB::~CChatLogDB()
{
	this->Close();
}

CChatLogDB* g_pInstance = NULL;

TQCHAT_RECORD_API IChatLogDB* CreateChatLogDB()
{
	if (NULL == g_pInstance)
	{
		g_pInstance = new CChatLogDB;
	}
	return g_pInstance;
}

TQCHAT_RECORD_API void DestoryChatLogDB()
{
	SAFE_DELETE( g_pInstance );
}

void CChatLogDB::Connect(const char* pszFullPath, const char* pszKey)
{
	if(pszFullPath == NULL)
	{
		return;
	}

	if (pszKey != NULL)
	{
		m_strDbKey = pszKey;
	}
	else
	{
		m_strDbKey = "";
	}
	
	this->Close();
	this->CreateDir(pszFullPath);
	
	if (m_objDB.OpenDB(pszFullPath, m_strDbKey.c_str()))
	{
		m_bConnected = true;
		m_objDB.Execute(STR_SYS_TABLE_CREATE);
		m_objDB.Execute(STR_NOM_TABLE_CREATE);
	}
	else
	{
		m_bConnected = false;
	}
}

void CChatLogDB::Commit()
{
	if (m_nAddLine != 0)
	{
		m_objDB.Execute("COMMIT");
		m_nAddLine = 0;
	}
}

void CChatLogDB::Close()
{
	if (m_nAddLine != 0)
	{
		m_objDB.Execute("COMMIT");
		m_nAddLine = 0;
	}

	if (m_bConnected)
	{
		m_objDB.CloseDB();
	}
}

void CChatLogDB::Reset()
{ 
	this->SetHeroLogin(false); 
}

int CChatLogDB::QuerySystemCount()
{
	if (!m_bConnected)
	{
		return 0;		
	}

	CResult* pResult = m_objDB.ExecuteSelect(SQL_SYSTEM_COUNT);	
	if (pResult != NULL)
	{
		const char* pszRet = pResult->GetAt(1, 0);
		if (pszRet != NULL)
		{
			return atoi(pszRet);
		}
	}

	return 0;
}

int CChatLogDB::QueryNormalCountByCondition(const char* pszSql)
{
	if(!m_bConnected || pszSql == NULL)
	{
		return 0;
	}

	CResult* pResult = m_objDB.ExecuteSelect(pszSql);	
	if (pResult != NULL)
	{
		const char* pszRet = pResult->GetAt(1, 0);
		if (pszRet != NULL)
		{
			return atoi(pszRet);
		}
	}

	return 0;
}

int CChatLogDB::QueryNormalCount()
{
	if (!m_bConnected)
	{
		return 0;		
	}

	CResult* pResult = m_objDB.ExecuteSelect(SQL_NORMAL_COUNT);	
	if (pResult != NULL)
	{
		const char* pszRet = pResult->GetAt(1, 0);
		if (pszRet != NULL)
		{
			return atoi(pszRet);
		}
	}

	return 0;
}

const VEC_CHAT_CONTACT& CChatLogDB::QueryContactList()
{
	m_vecChatContact.clear();

	if (m_bConnected)
	{
		MAP_CHAT_CONTACT mapContact;
		CResult* pResult = m_objDB.ExecuteSelect(STR_CONTACT_QUERY);
		if (NULL != pResult)
		{
			for (int i = 1; i < pResult->GetRowNum(); ++i)
			{
				string strSender	= pResult->GetAt(i, 0);
				string strReciver	= pResult->GetAt(i, 1); 
				long lTime			= atoi(pResult->GetAt(i, 2));

				if (!strSender.empty())
				{
					if (mapContact[strSender] < lTime)
					{
						mapContact[strSender] = lTime;
					}
				}

				if (!strReciver.empty())
				{
					if (mapContact[strReciver] < lTime)
					{
						mapContact[strReciver] = lTime;
					}
				}
			}
		}

		ITER_MAP_CHAT_CONTACT iter = mapContact.begin();
		for(; iter!=mapContact.end(); ++iter)
		{
			CHAT_CONTACT_INFO info;
			info.strName = iter->first;
			info.lTime = iter->second;
			m_vecChatContact.push_back(info);
		}
	}

	return m_vecChatContact;
}

void CChatLogDB::AddValueUsingBinaryMode(const CHAT_DB_ROW_INFO* pRowInfo, bool bIsSystem)
{
	if (!m_bConnected || pRowInfo == NULL || !m_bLog)
	{
		return;
	}
	
	//////////////////////////////////////////////////////////////////////////
	//判斷時間是否相同,不同的話換一個數據庫文件
	struct tm *newtime;
	time_t long_time;
    time( &long_time );                /* Get time as long integer. */
    newtime = localtime( &long_time ); /* Convert to local time. */
	if (newtime == NULL)
	{
		return;
	}

	int nYear	= newtime->tm_year + 1900;
	int nMonth	= newtime->tm_mon + 1;
	int nGetTime = nYear * 10000 + nMonth * 100 + newtime->tm_mday;
	
	//如果時間不相等
	if (m_lCurTime != nGetTime)
	{
		m_lCurTime = nGetTime;

		char szFullPath[256] = {0};
		sprintf(szFullPath, "%schatlog_%d_%d.db", m_strCurPath.c_str(), nMonth, newtime->tm_mday);
		this->Connect(szFullPath, m_strDbKey.c_str());
	}
	//////////////////////////////////////////////////////////////////////////
	if (0 == m_nAddLine)
	{
		m_objDB.Execute("BEGIN");
	}

	char szTemp[512];
	if (bIsSystem)
	{	
		sprintf(szTemp, SQL_INSERT_SYSTEM_BIN, pRowInfo->lTime);
	}
	else
	{
		sprintf(szTemp, SQL_INSERT_NORMAL_BIN, pRowInfo->lTime, pRowInfo->nChannel, 
			    pRowInfo->strSender.c_str(), pRowInfo->strReceiver.c_str());
	}

	char szTimeString[40] = "";
	_strtime(szTimeString);
	string strContent = pRowInfo->strText;
	strContent += "#G【";
	strContent += szTimeString;
	strContent += "】";

	string strTmp = szTemp;
	m_objDB.AddInfoContainBinary(strTmp, strContent);

	++m_nAddLine;
	if (m_nAddLine > 20)
	{
		m_nAddLine = 0;
		m_objDB.Execute("COMMIT");
	}				
}

const ROW_INFO_VEC&	CChatLogDB::QueryValueUsingBinaryMode(const char* pszSql, bool bSys)
{
	m_vecResultSet.clear();
	if(pszSql == NULL)
	{
		return m_vecResultSet;
	}
	
	if (m_bConnected)
	{
		string strSql = pszSql;
		m_objDB.GetInfoContainBinary(strSql, m_vecResultSet, bSys);
	}

	return m_vecResultSet;
}

void CChatLogDB::DelLogByGivenTimeSet(const VEC_CHAT_TIME& vecTime, bool bIsSystem)
{
	if (!m_bConnected || vecTime.empty())
	{
		return;
	}
	
	//事物處理
	m_objDB.Execute("BEGIN");
	for (int i=0; i<vecTime.size(); ++i)
	{
		char szTemp[256];
		if (bIsSystem)
		{
			sprintf(szTemp, SQL_DELETE_SYSTEM_BY_TIME, vecTime[i]);
		}
		else
		{
			sprintf(szTemp, SQL_DELETE_NORMAL_BY_TIME, vecTime[i]);
		}

		m_objDB.Execute(szTemp);
	}
	m_objDB.Execute("COMMIT");
}

void CChatLogDB::DelLogByTime(long lTime, bool bIsSystem)
{
	if (!m_bConnected)
	{
		return;
	}

	char szTemp[256];
	if (bIsSystem)
	{
		sprintf(szTemp, SQL_DELETE_SYSTEM_BY_TIME, lTime);
	}
	else
	{
		sprintf(szTemp, SQL_DELETE_NORMAL_BY_TIME, lTime);
	}

	m_objDB.Execute(szTemp);
}

void CChatLogDB::DelLogByID(DWORD id, bool bIsSystem)
{
	if (!m_bConnected)
	{
		return;
	}

	char szTemp[256];
	if (bIsSystem)
	{
		sprintf(szTemp, STR_DELETE_SYSTEM, id);
	}
	else
	{
		sprintf(szTemp, STR_DELETE_NORMAL, id);
	}

	m_objDB.Execute(szTemp);
}

void CChatLogDB::DelCurrentLog(bool bIsSystem)
{
	if (!m_bConnected)
	{
		return;
	}
	
	m_objDB.Execute("BEGIN");
	for (int i = 0; i < m_vecResultSet.size(); ++i)
	{
		this->DelLogByID(m_vecResultSet[i].id, bIsSystem);
	}
	m_objDB.Execute("COMMIT");
}

void CChatLogDB::DelBySql(const char* pszSql)
{
	if (pszSql == NULL)
	{
		return;
	}

	m_objDB.Execute(pszSql);
}

void CChatLogDB::SetCurPath(const char* pszText)
{
	if (pszText != NULL)
	{
		m_strCurPath = pszText;
	}
}

bool CChatLogDB::CreateDir(const char *pszPath)   
{   
	if (pszPath == NULL || pszPath[0] == '\0')
	{
		return false;
	}

	char DirName[256];   
	strcpy(DirName, pszPath);   

	int len   =  strlen(DirName); 
	for(int i=1; i<len; i++)   
	{   
		if(DirName[i] == '\\')   
		{   
			DirName[i]   =   0;   
			if(_access(DirName,   0) != 0)   
			{   
				int nRet = _mkdir(DirName);
				if (nRet == -1 && errno != EEXIST)
				{
					return false;	 
				}
			}   
			DirName[i]   =   '\\';   
		}   
	}   
    
	return   true;   
} 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本电影欧美片| 国产91精品露脸国语对白| 中文字幕一区二区三区在线观看| 欧美成人三级电影在线| 欧美视频完全免费看| 欧美性色欧美a在线播放| 日本电影欧美片| 欧美老肥妇做.爰bbww| 欧美吻胸吃奶大尺度电影 | 一区在线中文字幕| 久久夜色精品国产欧美乱极品| 欧美精品一区二区三区在线 | 波多野结衣精品在线| 91论坛在线播放| 欧美精品三级在线观看| 亚洲精品一区二区三区99| 久久毛片高清国产| 亚洲欧美日韩久久精品| 亚洲成人福利片| 另类小说欧美激情| 国产馆精品极品| 99久久免费国产| 欧美区视频在线观看| 91精品国产福利在线观看| 精品国产1区二区| 日韩一区在线看| 日韩av电影免费观看高清完整版在线观看 | 波多野结衣亚洲一区| 色999日韩国产欧美一区二区| 在线播放视频一区| 国产人成亚洲第一网站在线播放 | 成人毛片在线观看| 欧美日韩成人一区二区| 日韩欧美激情一区| 综合久久久久综合| 日韩精品一区第一页| av一区二区不卡| 欧美精品成人一区二区三区四区| 久久综合精品国产一区二区三区| 最新国产の精品合集bt伙计| 五月婷婷激情综合| 成人免费观看男女羞羞视频| 欧美另类videos死尸| 中文在线一区二区| 午夜精品影院在线观看| 91最新地址在线播放| 欧美成人欧美edvon| 一区二区久久久久久| 国产在线播放一区二区三区| 欧美日韩dvd在线观看| 欧美国产成人精品| 国产美女视频一区| 日韩欧美精品在线视频| 亚洲成人免费电影| 色av综合在线| 亚洲男人的天堂网| 不卡视频免费播放| 久久久精品tv| 国产精品亚洲一区二区三区在线 | 国产精品私人影院| 国内外成人在线| 日韩视频免费观看高清完整版在线观看| 国产精品久久久久影院老司| 精品亚洲国产成人av制服丝袜 | 久久er精品视频| 欧美精品 国产精品| 亚洲成人综合网站| 欧美制服丝袜第一页| 亚洲人成亚洲人成在线观看图片| 国产91精品欧美| 国产欧美一区二区精品仙草咪| 久久国产尿小便嘘嘘| 91精品国产福利| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美日韩第一区日日骚| 亚洲电影在线播放| 欧美二区在线观看| 天堂成人免费av电影一区| 5月丁香婷婷综合| 天天av天天翘天天综合网色鬼国产| 欧美性一区二区| 性欧美大战久久久久久久久| 欧美丰满嫩嫩电影| 九一九一国产精品| 中文欧美字幕免费| 色偷偷久久一区二区三区| 亚洲精品久久久久久国产精华液| 色综合久久中文综合久久牛| 亚洲最色的网站| 日韩精品在线网站| 成人免费va视频| 亚洲最大成人网4388xx| 欧美精品xxxxbbbb| 国产精品一二三四区| 亚洲男人的天堂av| 911国产精品| 国产999精品久久| 一区二区三区四区精品在线视频| 欧美日韩国产高清一区二区三区 | 日韩av不卡一区二区| 日韩视频国产视频| 波多野结衣亚洲| 日韩福利视频导航| 亚洲国产精品精华液ab| 欧美日韩精品欧美日韩精品一| 美女脱光内衣内裤视频久久网站| 国产午夜久久久久| 精品视频色一区| 国产电影精品久久禁18| 亚洲一区精品在线| 久久蜜桃香蕉精品一区二区三区| 91精品1区2区| 国产毛片一区二区| 亚洲一区在线观看免费| 国产欧美日韩一区二区三区在线观看| 色偷偷一区二区三区| 国产剧情在线观看一区二区| 一区二区三区四区中文字幕| 久久免费看少妇高潮| 欧美日韩亚洲高清一区二区| 国产不卡视频在线播放| 蜜桃视频在线观看一区| 亚洲精品伦理在线| 国产免费观看久久| 精品剧情v国产在线观看在线| 一本一道久久a久久精品| 国内成+人亚洲+欧美+综合在线| 亚洲成人资源在线| 亚洲欧美在线aaa| 久久久精品影视| 欧美一区二区啪啪| 91久久国产综合久久| 国产成都精品91一区二区三| 麻豆免费精品视频| 亚洲超碰精品一区二区| 一区2区3区在线看| 亚洲青青青在线视频| 国产日韩欧美精品在线| 精品国产一区二区在线观看| 7777精品伊人久久久大香线蕉| 97久久超碰精品国产| 成人一区二区三区视频在线观看| 久久91精品国产91久久小草| 午夜精品久久久久| 午夜婷婷国产麻豆精品| 亚洲在线观看免费视频| 亚洲免费成人av| 亚洲男人都懂的| 亚洲一区二区三区视频在线| 专区另类欧美日韩| 亚洲欧美偷拍卡通变态| 亚洲人快播电影网| 亚洲精品高清在线| 夜夜揉揉日日人人青青一国产精品 | 中文在线资源观看网站视频免费不卡| 欧美成人r级一区二区三区| 欧美一级片免费看| 欧美va日韩va| 久久精品视频免费| 亚洲国产电影在线观看| 国产精品国产三级国产普通话三级| 中日韩av电影| 一片黄亚洲嫩模| 日韩电影在线看| 狠狠色丁香婷婷综合| 国产九九视频一区二区三区| 成人av电影观看| 色噜噜狠狠色综合欧洲selulu| 欧美视频一区二| 日韩一区二区三区在线| 久久色在线观看| 亚洲色图19p| 日本在线播放一区二区三区| 久久97超碰色| 色一情一伦一子一伦一区| 欧美日免费三级在线| 欧美电视剧在线观看完整版| 国产日韩高清在线| 亚洲乱码一区二区三区在线观看| 夜夜嗨av一区二区三区| 经典三级一区二区| 99国产精品视频免费观看| 欧美情侣在线播放| 久久久久成人黄色影片| 亚洲精品视频免费看| 精品亚洲成av人在线观看| 99久久综合精品| 欧美成人a视频| 亚洲va国产va欧美va观看| 国产精品综合av一区二区国产馆| 一本大道久久a久久精品综合| 欧美精品v日韩精品v韩国精品v| 欧美极品少妇xxxxⅹ高跟鞋| 午夜精品久久久久久久99水蜜桃 | 欧美激情一区二区三区四区| 五月天视频一区| 99精品欧美一区二区三区综合在线| 日韩一区二区在线免费观看| 亚洲天天做日日做天天谢日日欢| 狂野欧美性猛交blacked|