My Project
|
00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 00024 00025 00026 00027 00028 #pragma once 00029 #include "Define.h" 00030 #include <sqlite3.h> 00031 #include <map> 00032 #include <string> 00033 #include "DatabaseMetaData.h" 00034 #include "Statement.h" 00035 #include "DatabaseObject.h" 00036 #include "StringHelper.h" 00037 00038 namespace SallyAPI 00039 { 00040 namespace Database 00041 { 00050 00051 class DLL_API_SALLY CDatabaseConnection 00052 { 00053 private: 00054 static std::map<std::string, SallyAPI::Database::CDatabaseConnection*> m_pOpenFiles; 00055 static CRITICAL_SECTION m_critSectOpenCloseDatabase; 00056 00057 int m_iConnectedThreads; 00058 sqlite3* m_pSqlite; 00059 CStatement* m_pStatement; 00060 CDatabaseMetaData* m_pDatabaseMetaData; 00061 CRITICAL_SECTION m_critSectLockDatabase; 00062 00063 00064 CDatabaseConnection(); 00065 ~CDatabaseConnection(); 00066 00067 void ConnectThread(); 00068 void DisconnectThread(); 00069 00070 void OpenDB(const std::string& db_name); 00071 void CloseDB(); 00072 public: 00073 int GetConnectedThreads(); 00074 00075 static SallyAPI::Database::CDatabaseConnection* Open(const std::string& file); 00076 static void Close(const std::string& file); 00077 00078 static void Init(); 00079 static void Destroy(); 00080 00081 CStatement* CreateStatement(); 00082 CDatabaseMetaData* GetDatabaseMetaData(); 00083 void RefreshMetaData(); 00084 void LockDatabase(); 00085 void ReleaseDatabase(); 00086 }; 00087 } 00088 }