Added databasefactory to create database connections
这个提交包含在:
		
							
								
								
									
										39
									
								
								cli/databasefactory.cpp
									
									
									
									
									
										普通文件
									
								
							
							
						
						
									
										39
									
								
								cli/databasefactory.cpp
									
									
									
									
									
										普通文件
									
								
							| @@ -0,0 +1,39 @@ | ||||
| #include <QThread> | ||||
| #include "databasefactory.h" | ||||
| #include "logger.h" | ||||
| DatabaseFactory::DatabaseFactory(QString connectionString) | ||||
| { | ||||
|     this->connectionString = connectionString; | ||||
| } | ||||
| static QThreadStorage<QSqlDatabase> dbStore; | ||||
|  | ||||
| //TODO: not threadsafe | ||||
| QSqlDatabase DatabaseFactory::createNew() | ||||
| { | ||||
|     static int counter = 0; | ||||
|     QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "QSS" + QString::number(counter++)); | ||||
|     db.setDatabaseName(this->connectionString); | ||||
|     if(!db.open()) | ||||
|     { | ||||
|         Logger::error() << "Failed to open the database: " << this->connectionString << endl; | ||||
|         throw QSSGeneralException("Failed to create open new connection"); | ||||
|     } | ||||
|     return db; | ||||
| } | ||||
|  | ||||
| QSqlDatabase DatabaseFactory::forCurrentThread() | ||||
| { | ||||
|     if(dbStore.hasLocalData()) | ||||
|     { | ||||
|         return dbStore.localData(); | ||||
|     } | ||||
|     QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "QSS" + QString::number((quint64)QThread::currentThread(), 16)); | ||||
|     db.setDatabaseName(this->connectionString); | ||||
|     if(!db.open()) | ||||
|     { | ||||
|         Logger::error() << "Failed to open the database: " << this->connectionString << endl; | ||||
|         throw QSSGeneralException("Failed to create open new connection"); | ||||
|     } | ||||
|     dbStore.setLocalData(db); | ||||
|     return db; | ||||
| } | ||||
							
								
								
									
										16
									
								
								cli/databasefactory.h
									
									
									
									
									
										普通文件
									
								
							
							
						
						
									
										16
									
								
								cli/databasefactory.h
									
									
									
									
									
										普通文件
									
								
							| @@ -0,0 +1,16 @@ | ||||
| #ifndef DATABASEFACTORY_H | ||||
| #define DATABASEFACTORY_H | ||||
| #include <QSqlDatabase> | ||||
| #include <QThreadStorage> | ||||
| #include "utils.h" | ||||
| class DatabaseFactory | ||||
| { | ||||
| private: | ||||
|     QString connectionString; | ||||
| public: | ||||
|     DatabaseFactory(QString connectionString); | ||||
|     QSqlDatabase createNew(); | ||||
|     QSqlDatabase forCurrentThread(); | ||||
| }; | ||||
|  | ||||
| #endif // DATABASEFACTORY_H | ||||
		在新工单中引用
	
	屏蔽一个用户