This repository has been archived by the owner on Aug 13, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
database.h
153 lines (139 loc) · 3.86 KB
/
database.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#ifndef DATABASE_H
#define DATABASE_H
#include <QCoreApplication>
#include <QtSql>
#include <QString>
#include <string>
#include <iostream>
#include <QDebug>
#include <QSqlField>
#include <QSqlDriver>
#include <QSqlRecord>
#include "templatemanager.h"
#include "Formation.h"
#include "Etudiant.h"
#include "uv.h"
#include "Categorie.h"
#include "Note.h"
#include "Saison.h"
#define q2c(string) string.toStdString()
/**
* @file Categorie.h
* @version 1
* @brief Ce fichier est le header de la classe database.
**/
using namespace std;
/**
* @brief Database class gère tous les échanges avec la base de données.
*/
class Database
{
/**
* @brief db base de données
*/
QSqlDatabase db;
/**
* @brief databaseName Chemin vers la base de données à laquelle on souhaite accéder.
*/
string databaseName;
/**
* @brief open ouvre la connection à la base de donnée.
* @return booleen vrai si cel a fonctionné.
*/
bool open()
{
return this->db.open();
}
/**
* @brief close ferme la connection à la db.
*/
void close()
{
db.close();
}
public:
/**
* @brief query effectue une requete vers la bdd.
* @param q requete
* @return resultat de la requete
*/
QSqlQuery query(string q);
/**
* @brief Database Constructeur de la classe
* @param path chemin vers la bdd sera stocké dans databasename
* @param dbname type de base de données. par défaut SQLITE
*/
Database(string path, string dbname="QSQLITE");
/**
* @brief détruit la base en fermant la connection.
*
*/
~Database(){db.close();}
/**
* @brief The SaverLoader class Classe imbriqué à database gère toutes les sauvegardes et chargement de la base de données.
*/
class SaverLoader //gere sauvegarde et chargement de la bdd
{
//on recupere tous les manager
/**
* @brief tUV tFormation tEtudiant tCategorie tNote tSaison tSemestre
* manager sur les différents élément à sauvegarder.
*/
TemplateManager<UV>& tUV=TemplateManager<UV>::getInstance();
TemplateManager<Formation>& tFormation=TemplateManager<Formation>::getInstance();
TemplateManager<Etudiant>& tEtudiant=TemplateManager<Etudiant>::getInstance();
TemplateManager<Categorie>& tCategorie=TemplateManager<Categorie>::getInstance();
TemplateManager<Note>& tNote=TemplateManager<Note>::getInstance();
TemplateManager<Saison>& tSaison=TemplateManager<Saison>::getInstance();
TemplateManager<Semestre>& tSemestre=TemplateManager<Semestre>::getInstance();
Database& db;
/**
* @brief init initialise une base de données propre avec toutes les tables nécessaires.
*/
void init();
public:
/**
* @brief SaverLoader constructeur
* @param database
*/
SaverLoader(Database& database):db(database){}
/**
* @brief save enregistre toutes les entités des managers dans une base de données.
*/
void save();
/**
* @brief load charge toutes les entités dans les managers respectifs.
*/
void load();
};
/**
* @brief save appelle le save du saverLoader
*/
void save()
{
SaverLoader(*this).save();
}
/**
* @brief load appelle le load du saver loader.
*/
void load()
{
SaverLoader(*this).load();
}
};
/**
* @brief DatabaseException class permet d'envoyer des exceptions de la base de données.
*/
class DatabaseException : public std::exception
{
protected :
std::string info;
public:
DatabaseException(const std::string& i="") throw() :info(i) {}
const char* what() const throw()
{
return info.c_str();
}
~DatabaseException()throw() {}
};
#endif // DATABASE_H