#include "StdAfx.h" #include "SQLLiteWrapper.h" SQLiteDB::SQLiteDB() { m_bConnected=false; pSQLiteConn = new SQLITECONNECTIONOBJECT(); Sync = new SyncDB(); } SQLiteDB::~SQLiteDB() { CloseConnection(); delete pSQLiteConn; delete Sync; } void SQLiteDB::CloseConnection() { if(pSQLiteConn->pCon) sqlite3_close(pSQLiteConn->pCon); } string SQLiteDB::GetLastError() { return m_strLastError; } bool SQLiteDB::isConnected() { return m_bConnected; } bool SQLiteDB::OpenConnection(string DatabaseName,string DatabaseDir) { pSQLiteConn->SQLiteDatabaseName = DatabaseName; pSQLiteConn->SQLiteDBPath = DatabaseDir; m_bConnected = true; string db=pSQLiteConn->SQLiteDatabaseName; string dir=pSQLiteConn->SQLiteDBPath; string path=dir.append(db); int rc = sqlite3_open(path.c_str(), &(pSQLiteConn->pCon)); m_strLastError =(string)sqlite3_errmsg(pSQLiteConn->pCon); if(!rc) { if(m_strLastError.find("not an error") == string::npos) m_bConnected = false; } return m_bConnected; } void SQLiteDB::BeginTransaction() { sqlite3_exec(pSQLiteConn->pCon, "BEGIN TRANSACTION", NULL, NULL,NULL); } void SQLiteDB::CommitTransection() { sqlite3_exec(pSQLiteConn->pCon, "COMMIT TRANSACTION", NULL, NULL,NULL); } IResult* SQLiteDB::ExcuteSelect(const char *Query) { if(!isConnected()) return NULL; Sync->LockDB(); if(sqlite3_prepare_v2(pSQLiteConn->pCon,Query,-1, &pSQLiteConn->pRes, NULL) != SQLITE_OK) { m_strLastError=sqlite3_errmsg(pSQLiteConn->pCon); sqlite3_finalize(pSQLiteConn->pRes); Sync->UnLockDB(); return NULL; } else { m_iColumnCount =sqlite3_column_count(pSQLiteConn->pRes); IResult *ires=this; return ires; } } UINT SQLiteDB::Excute(const char *Query) { if(!isConnected()) return NULL; m_strLastError=""; char* err=""; if(sqlite3_exec(pSQLiteConn->pCon, Query, NULL, 0, &err) != SQLITE_OK) { m_strLastError=sqlite3_errmsg(pSQLiteConn->pCon); return 0; } return sqlite3_total_changes(pSQLiteConn->pCon); } /*Result Set Definations*/ int SQLiteDB::GetColumnCount() { return m_iColumnCount; } const char* SQLiteDB::NextColomnName(int iClmnCount) { if(iClmnCount > m_iColumnCount) return ""; return sqlite3_column_name(pSQLiteConn->pRes,iClmnCount); } bool SQLiteDB:: Next() { return (sqlite3_step(pSQLiteConn->pRes)==SQLITE_ROW) ? true : false; } const char* SQLiteDB::ColomnData(int clmNum) { if(clmNum > m_iColumnCount) return ""; return ((const char*)sqlite3_column_text(pSQLiteConn->pRes,clmNum)); } void SQLiteDB::Release() { sqlite3_finalize(pSQLiteConn->pRes); m_iColumnCount=0; m_strLastError=""; Sync->UnLockDB(); }