Added databasefactory to create database connections
This commit is contained in:
父節點
dce13706e1
當前提交
d2712e5293
39
cli/databasefactory.cpp
Normal file
39
cli/databasefactory.cpp
Normal file
@ -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
Normal file
16
cli/databasefactory.h
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user