PageRenderTime 58ms CodeModel.GetById 13ms app.highlight 41ms RepoModel.GetById 2ms app.codeStats 0ms

/TGame/TUtil/Sqlite/DB_SQLite.cpp

http://awoe.googlecode.com/
C++ | 416 lines | 395 code | 14 blank | 7 comment | 4 complexity | 9a000d66409f95f6886e92f10b195ce9 MD5 | raw file
  1
  2#include "stdafx.h"
  3#include "DB_SQLite.h"
  4#include "Log_SQLite.h"
  5#include "comutil.h"
  6#include "win32/CharacterSet.h"
  7
  8#define DEFAULT_LOGFILE_NAME _T("Log_SQLite.log")
  9#define DEFAULT_LOGDIRECTORY _T("db")
 10#define MAX_BUFFER_NUM 512
 11
 12
 13////////////////////////////////////////////////////////////////////////////////////////////////////
 14CSQLiteBase::CSQLiteBase()
 15{
 16	m_LogCallBack = NULL;
 17	m_WorkDirectory.Empty();
 18	m_LogFileName.Empty();
 19	m_IsOpen = false;
 20	SetWorkDirectory((DEFAULT_LOGDIRECTORY));
 21	SetLiteLogName((DEFAULT_LOGFILE_NAME));
 22}
 23
 24////////////////////////////////////////////////////////////////////////////////////////////////////
 25CSQLiteBase::~CSQLiteBase()
 26{
 27}
 28
 29
 30////////////////////////////////////////////////////////////////////////////////////////////////////
 31bool CSQLiteBase::OpenFullPath(const char* FileName)
 32{
 33	if(FileName==NULL)
 34	{
 35		WriteSQLLog(1,CString("filename null error!"));
 36		return false;
 37	}
 38	try
 39	{
 40		m_db.close();
 41		m_db.open(FileName);
 42		m_IsOpen = true;
 43	}
 44	catch(CppSQLite3Exception ex)
 45	{
 46		m_IsOpen = false;
 47		CString Log;
 48		Log.Format("Open Error!");
 49		WriteSQLLog(1,Log);
 50		return false;
 51	}
 52	return m_IsOpen;
 53
 54}
 55
 56////////////////////////////////////////////////////////////////////////////////////////////////////
 57bool CSQLiteBase::Open(const char* FileName)
 58{
 59	if(FileName==NULL)
 60	{
 61		WriteSQLLog(1,CString("filename null error!"));
 62		return false;
 63	}
 64	try
 65	{
 66
 67		m_db.open(FileName);
 68		m_IsOpen = m_db.dbExists();
 69	}
 70	catch(CppSQLite3Exception ex)
 71	{
 72		m_IsOpen = false;
 73		CString Log;
 74		Log.Format("Open Error!");
 75		WriteSQLLog(1,Log);
 76		return false;
 77	}
 78	return m_IsOpen;
 79}
 80
 81////////////////////////////////////////////////////////////////////////////////////////////////////
 82void CSQLiteBase::Close()
 83{
 84	m_db.close();
 85}
 86
 87////////////////////////////////////////////////////////////////////////////////////////////////////
 88void CSQLiteBase::SetWorkDirectory(const char* Directory)
 89{
 90	m_WorkDirectory = Directory;
 91}
 92
 93////////////////////////////////////////////////////////////////////////////////////////////////////
 94void CSQLiteBase::SetLiteLogName(const char* LogName)
 95{
 96	if(LogName==NULL)
 97		return;
 98
 99	if(m_WorkDirectory.IsEmpty())
100	{
101		m_LogFileName += DEFAULT_LOGDIRECTORY;	
102	}
103	else
104	{
105		m_LogFileName += m_WorkDirectory;
106	}
107	m_LogFileName +="\\";
108	m_LogFileName += LogName;
109}
110
111////////////////////////////////////////////////////////////////////////////////////////////////////
112void CSQLiteBase::WriteSQLLog(int i , const char* szLogError)
113{
114
115	if(m_LogCallBack!=NULL)
116		m_LogCallBack(i,szLogError);
117}
118
119////////////////////////////////////////////////////////////////////////////////////////////////////
120bool CSQLiteBase::IsOpen()
121{
122	return this->m_IsOpen;
123}
124
125////////////////////////////////////////////////////////////////////////////////////////////////////
126bool CSQLiteBase::BeginSqlCommit(SQLiteList& test)
127{
128	int i = 0;
129	try
130	{
131		GetDB()->execDML("begin transaction;");
132
133		for (i = 0; i <(int)test.size(); i++)
134		{
135			CString str = test[i];
136
137			GetDB()->execDML((const char*)test[i]);
138		}
139
140
141		GetDB()->execDML("commit transaction;");
142		return true;
143	}
144	catch(CppSQLite3Exception& ex)
145	{
146		GetDB()->execDML("commit transaction;");
147		WriteSQLLog(1,ex.errorMessage());
148		throw i;// throw out the error sql command , so out
149		return false;
150	}
151}
152
153////////////////////////////////////////////////////////////////////////////////////////////////////
154bool CSQLiteBase::Transcode(const char* Source, unsigned short& numRet)
155{
156	CString strRet;
157	if (Transcode(Source, strRet) != NULL)
158	{
159		numRet = atoi(strRet.GetBuffer());
160		return true;
161	}
162	else
163	{
164		numRet = 0;
165	}
166	return false;
167}
168
169////////////////////////////////////////////////////////////////////////////////////////////////////
170bool CSQLiteBase::Transcode(const char* Source, short& numRet)
171{
172	CString strRet;
173	if (Transcode(Source, strRet) != NULL)
174	{
175		numRet = atoi(strRet.GetBuffer());
176		return true;
177	}
178	else
179	{
180		numRet = 0;
181	}
182	return false;
183}
184
185////////////////////////////////////////////////////////////////////////////////////////////////////
186bool CSQLiteBase::Transcode(const char* Source, int& numRet)
187{
188	CString strRet;
189	if (Transcode(Source, strRet) != NULL)
190	{
191		numRet = atoi(strRet.GetBuffer());
192		return true;
193	}
194	else
195	{
196		numRet = 0;
197	}
198	return false;
199}
200
201////////////////////////////////////////////////////////////////////////////////////////////////////
202bool CSQLiteBase::Transcode(const char* Source, unsigned int& numRet)
203{
204	CString strRet;
205	if (Transcode(Source, strRet) != NULL)
206	{
207		numRet = atoi(strRet.GetBuffer());
208		return true;
209	}
210	else
211	{
212		numRet = 0;
213	}
214	return false;
215}
216
217////////////////////////////////////////////////////////////////////////////////////////////////////
218bool CSQLiteBase::Transcode(const char* Source, bool& flagRet)
219{
220	int num;
221	if (Transcode(Source, num) == true)
222	{
223		return (num != 0);
224	}
225	return false;
226}
227
228const char* CSQLiteBase::NoTranscode(const char* Source,CString& strRet)
229{
230	int len =0; 
231	strRet.Empty();
232	if (Source == NULL)
233	{
234
235		return NULL;
236	}
237	try
238	{
239		strRet = Source ;
240	}
241	catch(...)
242	{
243		return NULL;
244	}
245    return (const char*)strRet;
246}
247
248////////////////////////////////////////////////////////////////////////////////////////////////////
249const char* CSQLiteBase::Transcode(const char* Source,CString& strRet)
250{
251	int len =0; 
252	strRet.Empty();
253	if (Source == NULL)
254	{
255
256		return NULL;
257	}
258	try
259	{
260		std::string newStr;
261		CharacterSet::ConvertUTF8ToASCII(Source, newStr);
262		strRet = newStr.c_str();
263	}
264	catch(...)
265	{
266		return NULL;
267	}
268    return (const char*)strRet;
269}
270
271bool CSQLiteBase::Transcode(const char* Source,string& strRet)
272{
273	if (Source == NULL)
274	{
275		return false;
276	}
277	try
278	{
279		CharacterSet::ConvertUTF8ToASCII(Source, strRet);
280		return true;
281	}
282	catch(...)
283	{
284		return false;
285	}
286	return false;
287}
288
289////////////////////////////////////////////////////////////////////////////////////////////////////
290CDBSQLite::CDBSQLite(void)
291{
292}
293
294
295////////////////////////////////////////////////////////////////////////////////////////////////////
296CDBSQLite::~CDBSQLite(void)
297{
298
299}
300
301////////////////////////////////////////////////////////////////////////////////////////////////////
302bool CDBSQLite::DBQueryTableField(const char* sFieldName, const char* sCondition, CString& strRet)
303{
304
305   if(!IsOpen())
306		return false;
307
308   if(m_TableName.IsEmpty())
309	   return false;
310
311   CString strSQL ;
312
313   if(sCondition==NULL)
314	   strSQL.Format("select %s from %s",sFieldName,(const char*)m_TableName);
315   else
316	   strSQL.Format("select %s from %s where %s",sFieldName,(const char*)m_TableName,sCondition);
317
318   try
319   {
320   		SQLiteDBQuery q = GetDB()->execQuery((const char*)strSQL);
321		if(q.eof())
322			return false;
323		else
324		{
325			Transcode(q.fieldValue(0),strRet);
326			return true;
327		}
328   }
329   catch(CppSQLite3Exception& ex)
330   {
331	   this->WriteSQLLog(1,ex.errorMessage());
332	   return false;
333   }
334
335}
336
337////////////////////////////////////////////////////////////////////////////////////////////////////
338bool CDBSQLite::DBQueryTableFieldList(const char* sFieldName, const char* sCondition, CDBSQLite::SQLiteList& strRetList)
339{
340	if(!IsOpen())
341		return false;
342	if(m_TableName.IsEmpty())
343		return false;
344
345	CString strSQL ;
346
347	if(sCondition==NULL)
348		strSQL.Format("select %s from %s",sFieldName,(const char*)m_TableName);
349	else
350		strSQL.Format("select %s from %s where %s",sFieldName,(const char*)m_TableName,sCondition);
351	SQLiteDBQuery q = GetDB()->execQuery((const char*)strSQL);
352	if(q.eof())
353		return false;
354	else
355	{
356		CString strRet;
357		while(!q.eof())
358		{
359			Transcode(q.fieldValue(0),strRet);
360			strRetList.push_back(strRet);
361			q.nextRow();
362		}
363		return true;
364	}
365}
366
367
368////////////////////////////////////////////////////////////////////////////////////////////////////
369unsigned int CDBSQLite::DBQueryTableCount()
370{
371	if(!IsOpen())
372		return false;
373	if(m_TableName.IsEmpty())
374		return false;
375	const char * sTemp = "select count(*) from %s";
376	CString strSQL;
377	strSQL.Format(sTemp,(const char*)m_TableName);
378	return GetDB()->execScalar((const char*)strSQL); 
379}
380
381////////////////////////////////////////////////////////////////////////////////////////////////////
382bool CDBSQLite::SetTableName(const char* szTableName)
383{
384	m_TableName = szTableName;
385	try
386	{
387		if(GetDB()->tableExists(szTableName))
388			return true;
389		else
390			return false;
391	}
392	catch(...)
393	{
394		m_TableName.Empty();
395		return false;
396	}
397	return true;
398}
399
400////////////////////////////////////////////////////////////////////////////////////////////////////
401bool CDBSQLite::ExecuteSQL(const char* szSQLCommand)
402{
403	int retValue = 0;
404	try
405	{
406		retValue = GetDB()->execDML(szSQLCommand);
407		return retValue>0;
408	}
409	catch(CppSQLite3Exception& ex)
410	{
411		WriteSQLLog(1,ex.errorMessage());
412		return false;
413	}
414}
415
416