ROV'NET  0.2
BTS SNIR LaSalle Avignon 2020
basededonnees.cpp
Aller à la documentation de ce fichier.
1 
7 #include "basededonnees.h"
8 #include <QDebug>
9 #include <QMessageBox>
10 
11 BaseDeDonnees* BaseDeDonnees::baseDeDonnees = nullptr;
12 QString BaseDeDonnees::typeBase = "QSQLITE";
14 
16 {
17  #ifdef DEBUG_BASEDEDONNEES
18  qDebug() << Q_FUNC_INFO << type;
19  #endif
20  db = QSqlDatabase::addDatabase(type);
21  typeBase = type;
22 }
23 
25 {
26  #ifdef DEBUG_BASEDEDONNEES
27  qDebug() << Q_FUNC_INFO;
28  #endif
29 }
30 
32 {
33  if(baseDeDonnees == nullptr)
34  baseDeDonnees = new BaseDeDonnees(type);
35 
36  nbAcces++;
37  #ifdef DEBUG_BASEDEDONNEES
38  qDebug() << Q_FUNC_INFO << "nbAcces" << nbAcces;
39  #endif
40 
41  return baseDeDonnees;
42 }
43 
45 {
46  if(baseDeDonnees != nullptr)
47  {
48  if(nbAcces > 0)
49  nbAcces--;
50 
51  #ifdef DEBUG_BASEDEDONNEES
52  qDebug() << Q_FUNC_INFO << "nbAcces restants" << nbAcces;
53  #endif
54 
55  if(nbAcces == 0)
56  {
57  delete baseDeDonnees;
58  baseDeDonnees = nullptr;
59  }
60  }
61 }
62 
63 bool BaseDeDonnees::ouvrir(QString fichierBase)
64 {
65  if(typeBase != "QSQLITE")
66  return false;
67  QMutexLocker verrou(&mutex);
68  if(!db.isOpen())
69  {
70  db.setDatabaseName(fichierBase);
71 
72  #ifdef DEBUG_BASEDEDONNEES
73  qDebug() << Q_FUNC_INFO << db.databaseName();
74  #endif
75 
76  if(db.open())
77  {
78 
79  #ifdef DEBUG_BASEDEDONNEES
80  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Ouverture réussie à %1").arg(db.databaseName());
81  #endif
82 
83  return true;
84  }
85  else
86  {
87  #ifdef DEBUG_BASEDEDONNEES
88  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Erreur : impossible d'ouvrir la base de données !");
89  #endif
90  QMessageBox::critical(nullptr, QString::fromUtf8("BaseDeDonnees"), QString::fromUtf8("Impossible d'ouvrir la base de données !"));
91  return false;
92  }
93  }
94  else
95  return true;
96 }
97 
99 {
100  QMutexLocker verrou(&mutex);
101  return db.isOpen();
102 }
103 
104 bool BaseDeDonnees::executer(QString requete)
105 {
106  QMutexLocker verrou(&mutex);
107  QSqlQuery r;
108  bool retour;
109 
110  if(db.isOpen())
111  {
112  if(requete.contains("UPDATE") || requete.contains("INSERT") || requete.contains("DELETE"))
113  {
114  retour = r.exec(requete);
115  #ifdef DEBUG_BASEDEDONNEES
116  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Retour %1 pour la requete : %2").arg(QString::number(retour)).arg(requete);
117  #endif
118  if(retour)
119  {
120  return true;
121  }
122  else
123  {
124  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Erreur : %1 pour la requête %2").arg(r.lastError().text()).arg(requete);
125  return false;
126  }
127  }
128  else
129  {
130  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Erreur : requête %1 non autorisée !").arg(requete);
131  return false;
132  }
133  }
134  else
135  return false;
136 
137 }
138 
139 bool BaseDeDonnees::recuperer(QString requete, QString &donnees)
140 {
141  QMutexLocker verrou(&mutex);
142  QSqlQuery r;
143  bool retour;
144 
145  if(db.isOpen())
146  {
147  if(requete.contains("SELECT"))
148  {
149  retour = r.exec(requete);
150  #ifdef DEBUG_BASEDEDONNEES
151  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Retour %1 pour la requete : %2").arg(QString::number(retour)).arg(requete);
152  #endif
153  if(retour)
154  {
155  r.first();
156 
157  if(!r.isValid())
158  {
159  #ifdef DEBUG_BASEDEDONNEES
160  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Résultat non valide !");
161  #endif
162  return false;
163  }
164 
165  if(r.isNull(0))
166  {
167  #ifdef DEBUG_BASEDEDONNEES
168  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Aucun résultat !");
169  #endif
170  return false;
171  }
172  donnees = r.value(0).toString();
173  #ifdef DEBUG_BASEDEDONNEES
174  qDebug() << Q_FUNC_INFO << "Enregistrement -> " << donnees;
175  #endif
176  return true;
177  }
178  else
179  {
180  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Erreur : %1 pour la requête %2").arg(r.lastError().text()).arg(requete);
181  return false;
182  }
183  }
184  else
185  {
186  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Erreur : requête %1 non autorisée !").arg(requete);
187  return false;
188  }
189  }
190  else
191  return false;
192 }
193 
194 bool BaseDeDonnees::recuperer(QString requete, QStringList &donnees)
195 {
196  QMutexLocker verrou(&mutex);
197  QSqlQuery r;
198  bool retour;
199 
200  if(db.isOpen())
201  {
202  if(requete.contains("SELECT"))
203  {
204  retour = r.exec(requete);
205  #ifdef DEBUG_BASEDEDONNEES
206  qDebug() << QString::fromUtf8("<BaseDeDonnees::recuperer(QString, QStringList)> retour %1 pour la requete : %2").arg(QString::number(retour)).arg(requete);
207  #endif
208  if(retour)
209  {
210  r.first();
211 
212  if(!r.isValid())
213  {
214  #ifdef DEBUG_BASEDEDONNEES
215  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Résultat non valide !");
216  #endif
217  return false;
218  }
219 
220  for(int i=0;i<r.record().count();i++)
221  if(!r.isNull(i))
222  donnees << r.value(i).toString();
223  #ifdef DEBUG_BASEDEDONNEES
224  qDebug() << Q_FUNC_INFO << "Enregistrement -> " << donnees;
225  #endif
226  return true;
227  }
228  else
229  {
230  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Erreur : %1 pour la requête %2").arg(r.lastError().text()).arg(requete);
231  return false;
232  }
233  }
234  else
235  {
236  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Erreur : requête %1 non autorisée !").arg(requete);
237  return false;
238  }
239  }
240  else
241  return false;
242 }
243 
244 bool BaseDeDonnees::recuperer(QString requete, QVector<QString> &donnees)
245 {
246  QMutexLocker verrou(&mutex);
247  QSqlQuery r;
248  bool retour;
249  QString data;
250 
251  if(db.isOpen())
252  {
253  if(requete.contains("SELECT"))
254  {
255  retour = r.exec(requete);
256  #ifdef DEBUG_BASEDEDONNEES
257  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Retour %1 pour la requete : %2").arg(QString::number(retour)).arg(requete);
258  #endif
259  if(retour)
260  {
261  while ( r.next() )
262  {
263  data = r.value(0).toString();
264 
265  #ifdef DEBUG_BASEDEDONNEES
266  qDebug() << Q_FUNC_INFO << "Enregistrement -> " << data;
267  #endif
268 
269  donnees.push_back(data);
270  }
271  #ifdef DEBUG_BASEDEDONNEES
272  qDebug() << Q_FUNC_INFO << "Enregistrement -> " << donnees;
273  #endif
274  return true;
275  }
276  else
277  {
278  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Erreur : %1 pour la requête %2").arg(r.lastError().text()).arg(requete);
279  return false;
280  }
281  }
282  else
283  {
284  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Erreur : requête %1 non autorisée !").arg(requete);
285  return false;
286  }
287  }
288  else
289  return false;
290 }
291 
292 bool BaseDeDonnees::recuperer(QString requete, QVector<QStringList> &donnees)
293 {
294  QMutexLocker verrou(&mutex);
295  QSqlQuery r;
296  bool retour;
297  QStringList data;
298 
299  if(db.isOpen())
300  {
301  if(requete.contains("SELECT"))
302  {
303  retour = r.exec(requete);
304  #ifdef DEBUG_BASEDEDONNEES
305  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Retour %1 pour la requete : %2").arg(QString::number(retour)).arg(requete);
306  #endif
307  if(retour)
308  {
309  while ( r.next() )
310  {
311  for(int i=0;i<r.record().count();i++)
312  data << r.value(i).toString();
313 
314  #ifdef DEBUG_BASEDEDONNEES
315  qDebug() << Q_FUNC_INFO << "Enregistrement -> " << data;
316  for(int i=0;i<r.record().count();i++)
317  qDebug() << r.value(i).toString();
318  #endif
319 
320  donnees.push_back(data);
321 
322  data.clear();
323  }
324  #ifdef DEBUG_BASEDEDONNEES
325  qDebug() << Q_FUNC_INFO << "Enregistrement -> " << donnees;
326  #endif
327  return true;
328  }
329  else
330  {
331  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Erreur : %1 pour la requête %2").arg(r.lastError().text()).arg(requete);
332  return false;
333  }
334  }
335  else
336  {
337  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Erreur : requête %1 non autorisée !").arg(requete);
338  return false;
339  }
340  }
341  else
342  return false;
343 }
static BaseDeDonnees * baseDeDonnees
Objet de type BaseDeDonnees accessible uniquement depuis une méthode static.
Definition: basededonnees.h:27
static void detruireInstance()
Permet de detruire l&#39;instance en cours, Static elle est accessible depuis n&#39;importe où ...
bool ouvrir(QString fichierBase)
Permet d&#39;ouvrir le fichier de base de données passé en paramètre.
Class permettant de s&#39;interfacer avec la base de données.
Definition: basededonnees.h:23
~BaseDeDonnees()
Destructeur de la classe BaseDeDonnees.
QSqlDatabase db
Objet de type QSqlDatabase permettant la connexion avec la base de données.
Definition: basededonnees.h:30
BaseDeDonnees(QString type)
Constructeur de la classe BaseDeDonnees en privé afin de controller ses appels.
static QString typeBase
Attribut de type QString contenant le type de la base de données (MySQL, SQLite, ...)
Definition: basededonnees.h:28
static BaseDeDonnees * getInstance(QString type="QSQLITE")
Permet de créer une instance de BDD ou de récuperer celle deja en cours, cette méthode controle l&#39;ins...
Fichier qui contient la déclaration de la classe BaseDeDonnees.
bool recuperer(QString requete, QString &donnees)
Permet d&#39;executer la requete passé en paramètre au format SQL, et remplit le QString de sa réponse...
static int nbAcces
Attribut de type int contenant le nombre d&#39;accès en cours à la base de données.
Definition: basededonnees.h:29
bool estOuvert()
Permet de savoir si la base de données est ouverte ou non.
bool executer(QString requete)
Permet d&#39;executer la requete passé en paramètre au format SQL.
QMutex mutex
Objet de type QMutex permettant de protéger l&#39;objet db, en autorisant son accès par un seul thread à ...
Definition: basededonnees.h:31