Projet e-stock  0.2
BTS SNIR LaSalle Avignon 2020
Bdd.cpp
Aller à la documentation de ce fichier.
1 #include "Bdd.h"
2 #include <QDebug>
3 #include <QMessageBox>
4 
19 Bdd* Bdd::bdd = NULL;
20 int Bdd::nbAcces = 0;
21 
28 {
29  #ifdef DEBUG_BDD
30  qDebug() << Q_FUNC_INFO;
31  #endif
32  db = QSqlDatabase::addDatabase("QMYSQL");
33 }
34 
41 {
42  #ifdef DEBUG_BDD
43  qDebug() << Q_FUNC_INFO;
44  #endif
45 }
46 
54 {
55  if(bdd == NULL)
56  bdd = new Bdd();
57 
58  nbAcces++;
59 
60  #ifdef DEBUG_BDD
61  qDebug() << Q_FUNC_INFO << "nbAcces" << nbAcces;
62  #endif
63 
64  return bdd;
65 
66 }
67 
74 {
75  if(bdd != NULL)
76  {
77  nbAcces--;
78  #ifdef DEBUG_BASEDEDONNEES
79  qDebug() << Q_FUNC_INFO << "nbAcces" << nbAcces;
80  #endif
81 
82  if(nbAcces == 0)
83  delete bdd;
84  }
85 }
86 
94 {
95  if(!db.isOpen())
96  {
97  db.setHostName(HOSTNAME);
98  db.setUserName(USERNAME);
99  db.setPassword(PASSWORD);
100  db.setDatabaseName(DATABASENAME);
101 
102  #ifdef DEBUG_BDD
103  qDebug() << Q_FUNC_INFO << "HostName" << db.hostName();
104  qDebug() << Q_FUNC_INFO << "UserName" << db.userName();
105  qDebug() << Q_FUNC_INFO << "DatabaseName" << db.databaseName();
106  #endif
107  if(db.open())
108  {
109  #ifdef DEBUG_BDD
110  qDebug() << Q_FUNC_INFO << QString::fromUtf8("connexion réussie à %1").arg(db.hostName());
111  #endif
112 
113  return true;
114  }
115  else
116  {
117  qDebug() << Q_FUNC_INFO << QString::fromUtf8("erreur : impossible de se connecter à la base de données !");
118 
119  QMessageBox::critical(0, QString::fromUtf8("e-stock"), QString::fromUtf8("Impossible de se connecter à la base de données !"));
120  return false;
121  }
122 
123  }
124  else
125  return true;
126 }
127 
135 {
136  return db.isOpen();
137 }
138 
146 bool Bdd::executer(QString requete)
147 {
148  QSqlQuery r;
149  bool retour;
150 
151  if(db.isOpen())
152  {
153  if(requete.contains("UPDATE") || requete.contains("INSERT") || requete.contains("DELETE"))
154  {
155  retour = r.exec(requete);
156  #ifdef DEBUG_BASEDEDONNEES
157  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Retour %1 pour la requete : %2").arg(QString::number(retour)).arg(requete);
158  #endif
159  if(retour)
160  {
161  return true;
162  }
163  else
164  {
165  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Erreur : %1 pour la requête %2").arg(r.lastError().text()).arg(requete);
166  return false;
167  }
168  }
169  else
170  {
171  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Erreur : requête %1 non autorisée !").arg(requete);
172  return false;
173  }
174  }
175  else
176  return false;
177 
178 }
179 
187 bool Bdd::recuperer(QString requete, QString &donnees)
188 {
189  QSqlQuery r;
190  bool retour;
191 
192  if(db.isOpen())
193  {
194  if(requete.contains("SELECT"))
195  {
196  retour = r.exec(requete);
197  #ifdef DEBUG_BASEDEDONNEES
198  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Retour %1 pour la requete : %2").arg(QString::number(retour)).arg(requete);
199  #endif
200  if(retour)
201  {
202  // on se positionne sur l'enregistrement
203  r.first();
204 
205  // on vérifie l'état de l'enregistrement retourné
206  if(!r.isValid())
207  {
208  #ifdef DEBUG_BASEDEDONNEES
209  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Résultat non valide !");
210  #endif
211  return false;
212  }
213 
214  // on récupère sous forme de QString la valeur du champ
215  if(r.isNull(0))
216  {
217  #ifdef DEBUG_BASEDEDONNEES
218  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Aucun résultat !");
219  #endif
220  return false;
221  }
222  donnees = r.value(0).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 
251 bool Bdd::recuperer(QString requete, QStringList &donnees)
252 {
253  QSqlQuery r;
254  bool retour;
255 
256  if(db.isOpen())
257  {
258  if(requete.contains("SELECT"))
259  {
260  retour = r.exec(requete);
261  #ifdef DEBUG_BASEDEDONNEES
262  qDebug() << QString::fromUtf8("Retour %1 pour la requete : %2").arg(QString::number(retour)).arg(requete);
263  #endif
264  if(retour)
265  {
266  // on se positionne sur l'enregistrement
267  r.first();
268 
269  // on vérifie l'état de l'enregistrement retourné
270  if(!r.isValid())
271  {
272  #ifdef DEBUG_BASEDEDONNEES
273  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Résultat non valide !");
274  #endif
275  return false;
276  }
277 
278  // on récupère sous forme de QString la valeur de tous les champs sélectionnés
279  // et on les stocke dans une liste de QString
280  for(int i=0;i<r.record().count();i++)
281  if(!r.isNull(i))
282  donnees << r.value(i).toString();
283  #ifdef DEBUG_BASEDEDONNEES
284  qDebug() << Q_FUNC_INFO << "Enregistrement -> " << donnees;
285  #endif
286  return true;
287  }
288  else
289  {
290  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Erreur : %1 pour la requête %2").arg(r.lastError().text()).arg(requete);
291  return false;
292  }
293  }
294  else
295  {
296  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Erreur : requête %1 non autorisée !").arg(requete);
297  return false;
298  }
299  }
300  else
301  return false;
302 }
303 
311 bool Bdd::recuperer(QString requete, QVector<QString> &donnees)
312 {
313  QSqlQuery r;
314  bool retour;
315  QString data;
316 
317  if(db.isOpen())
318  {
319  if(requete.contains("SELECT"))
320  {
321  retour = r.exec(requete);
322  #ifdef DEBUG_BASEDEDONNEES
323  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Retour %1 pour la requete : %2").arg(QString::number(retour)).arg(requete);
324  #endif
325  if(retour)
326  {
327  // pour chaque enregistrement
328  while ( r.next() )
329  {
330  // on récupère sous forme de QString la valeur du champs sélectionné
331  data = r.value(0).toString();
332 
333  #ifdef DEBUG_BASEDEDONNEES
334  //qDebug() << Q_FUNC_INFO << "Enregistrement -> " << data;
335  #endif
336 
337  // on stocke l'enregistrement dans le QVector
338  donnees.push_back(data);
339  }
340  #ifdef DEBUG_BASEDEDONNEES
341  qDebug() << Q_FUNC_INFO << "Enregistrement -> " << donnees;
342  #endif
343  return true;
344  }
345  else
346  {
347  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Erreur : %1 pour la requête %2").arg(r.lastError().text()).arg(requete);
348  return false;
349  }
350  }
351  else
352  {
353  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Erreur : requête %1 non autorisée !").arg(requete);
354  return false;
355  }
356  }
357  else
358  return false;
359 }
360 
367 bool Bdd::recuperer(QString requete, QVector<QStringList> &donnees)
368 {
369  QSqlQuery r;
370  bool retour;
371  QStringList data;
372 
373  if(db.isOpen())
374  {
375  if(requete.contains("SELECT"))
376  {
377  retour = r.exec(requete);
378  #ifdef DEBUG_BASEDEDONNEES
379  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Retour %1 pour la requete : %2").arg(QString::number(retour)).arg(requete);
380  #endif
381  if(retour)
382  {
383  // pour chaque enregistrement
384  while ( r.next() )
385  {
386  // on récupère sous forme de QString la valeur de tous les champs sélectionnés
387  // et on les stocke dans une liste de QString
388  for(int i=0;i<r.record().count();i++)
389  data << r.value(i).toString();
390 
391  #ifdef DEBUG_BASEDEDONNEES
392  //qDebug() << Q_FUNC_INFO << "Enregistrement -> " << data;
393  /*for(int i=0;i<r.record().count();i++)
394  qDebug() << r.value(i).toString();*/
395  #endif
396 
397  // on stocke l'enregistrement dans le QVector
398  donnees.push_back(data);
399 
400  // on efface la liste de QString pour le prochain enregistrement
401  data.clear();
402  }
403  #ifdef DEBUG_BASEDEDONNEES
404  qDebug() << Q_FUNC_INFO << "Enregistrement -> " << donnees;
405  #endif
406  return true;
407  }
408  else
409  {
410  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Erreur : %1 pour la requête %2").arg(r.lastError().text()).arg(requete);
411  return false;
412  }
413  }
414  else
415  {
416  qDebug() << Q_FUNC_INFO << QString::fromUtf8("Erreur : requête %1 non autorisée !").arg(requete);
417  return false;
418  }
419  }
420  else
421  return false;
422 }
QSqlDatabase db
pour la connexion à la base de données MySQL
Definition: Bdd.h:63
bool executer(QString requete)
exécute une requête SQL de type UPDATE, INSERT et DELETE
Definition: Bdd.cpp:146
Bdd()
Définition du constructeur de la classe Bdd.
Definition: Bdd.cpp:27
static void detruireInstance()
Définition méthode detruireInstance()
Definition: Bdd.cpp:73
bool connecter()
Définition méthose connecter()
Definition: Bdd.cpp:93
#define DATABASENAME
Definition: Bdd.h:13
#define USERNAME
Definition: Bdd.h:11
#define PASSWORD
Definition: Bdd.h:12
static int nbAcces
compte le nombre d&#39;accès à l&#39;instance unique
Definition: Bdd.h:65
Déclaration de la classe Bdd.
~Bdd()
Définition du destructeur de la classe Bdd.
Definition: Bdd.cpp:40
bool recuperer(QString requete, QString &donnees)
exécute une requête SQL de type SELECT et récupère un champ d&#39;un seul enregistrement ...
Definition: Bdd.cpp:187
bool estConnecte()
retourne l&#39;état de connexion à la base de données
Definition: Bdd.cpp:134
#define HOSTNAME
Definition: Bdd.h:10
static Bdd * bdd
pointeur sur l&#39;instance unique
Definition: Bdd.h:64
Déclaration de la classe utilisant la base de données.
Definition: Bdd.h:42
static Bdd * getInstance()
Définition méthode getInstance()
Definition: Bdd.cpp:53