Mobile-AREA  1.1
BTS SNIR LaSalle Avignon 2021
BaseDeDonnees.java
Aller à la documentation de ce fichier.
1 package com.example.area;
2 
3 import android.content.Context;
4 import android.database.Cursor;
5 import android.database.sqlite.SQLiteDatabase;
6 import android.util.Log;
7 
8 import java.util.ListIterator;
9 import java.util.Vector;
10 
24 public class BaseDeDonnees
25 {
26  private static final String TAG = "_BaseDeDonnees";//<! TAG pour les logs
27  private SQLiteDatabase bdd = null;//<! L'accès à la base de données
28  private SQLiteAREA SQLiteAREA = null;//<! Permet l'initialisation de la base de données
29 
33  private static final int INDEX_ID_JOUEUR = 0;
34  private static final int INDEX_NOM_JOUEUR = 2;
35  private static final int INDEX_PRENOM_JOUEUR = 3;
36  private static final int INDEX_ID_EQUIPE = 0;
37  private static final int INDEX_NOM_CLUB = 1;
38 
39  private static final int INDEX_ID_PARTIE = 0;
40  private static final int INDEX_ID_RENCONTRE = 1;
41  private static final int INDEX_ID_JOUEUR_A = 2;
42  private static final int INDEX_ID_JOUEUR_B = 3;
43  private static final int INDEX_ID_JOUEUR_W = 4;
44  private static final int INDEX_ID_JOUEUR_X = 5;
45  private static final int INDEX_NB_MANCHES_GAGNANTES = 6;
46  private static final int INDEX_NB_POINTS_PAR_MANCHES= 7;
47  private static final int INDEX_TYPE_PARTIE = 8;
48  private static final int INDEX_FIN_PARTIE = 10;
49 
50  private static final int TYPE_PARTIE_SIMPLE = 1;
51  private static final int TYPE_PARTIE_DOUBLE = 2;
52 
53  private static final String DEBUT_REQUETE_INSERTION_PARTIE = "INSERT INTO Partie(idPartie, idRencontre, idJoueurA, idJoueurB, idJoueurW, idJoueurX, nbManchesGagnantes, nbPointsParManche, typePartie, debut) VALUES (NULL,";
54  private static final String DEBUT_REQUETE_TERMINER_PARTIE = "UPDATE Partie SET fin=DATETIME('now') WHERE idPartie=";
55  private static final String DEBUT_REQUETE_INSERTION_RENCONTRE = "INSERT INTO Rencontre(idRencontre, idEquipeA, idEquipeB, nbPartiesGagnantes, estFinie, horodatage) VALUES (NULL,";
56  private static final String FIN_REQUETE_INSERTION_RENCONTRE = "0,DATETIME('now'))";
57  private static final String REQUETE_ID_RENCONTRE = "SELECT MAX(idRencontre) FROM Rencontre";
58  private static final String REQUETE_ID_EQUIPE = "SELECT MAX(idEquipe) FROM Equipe";
59  private static final String DEBUT_REQUETE_INSERTION_JOUEUR = "INSERT INTO Joueur(numeroLicence, idEquipe, nom, prenom) VALUES (";
60  private static final String DEBUT_REQUETE_PRESENCE_JOUEUR = "SELECT * FROM Joueur WHERE numeroLicence='";
61  private static final String DEBUT_REQUETE_INSERTION_EQUIPE = "INSERT INTO Equipe (idEquipe, nomClub) VALUES (NULL,";
62  private static final String DEBUT_REQUETE_ID_EQUIPE = "SELECT idEquipe FROM Equipe WHERE nomClub = '";
63 
68  public BaseDeDonnees(Context context)
69  {
70  this.SQLiteAREA = new SQLiteAREA(context);
71  }
72 
76  private void ouvrir()
77  {
78  Log.d(TAG, "ouvrir()");
79  if (bdd == null)
80  bdd = SQLiteAREA.getWritableDatabase();
81  }
82 
86  private void fermer()
87  {
88  Log.d(TAG, "fermer()");
89  if (bdd != null)
90  if (bdd.isOpen())
91  bdd.close();
92  }
93 
98  private Cursor effectuerRequete(String requete)
99  {
100  ouvrir();
101 
102  Cursor curseurResultat = bdd.rawQuery(requete,null);
103 
104  Log.d(TAG,"effectuerRequete() : Exécution de la requete : " + requete);
105 
106  Log.d(TAG,"effectuerRequete() : Nombre de résultats : " + Integer.toString(curseurResultat.getCount()));
107 
108  return curseurResultat;
109  }
110 
115  public Vector<Equipe> getEquipes()
116  {
117  Vector<Equipe> equipes = new Vector<Equipe>();
118  String requete = "SELECT * FROM Equipe";
119 
120  Cursor curseurResultat = effectuerRequete(requete);
121 
122  for (int i = 0; i < curseurResultat.getCount(); i++)
123  {
124  curseurResultat.moveToNext();
125  Log.d(TAG,"idEquipe = " + curseurResultat.getString(INDEX_ID_EQUIPE) + " | " + "nomClub = " + curseurResultat.getString(INDEX_NOM_CLUB));
126  equipes.add(new Equipe(curseurResultat.getString(INDEX_NOM_CLUB),getJoueurEquipe(curseurResultat.getInt(INDEX_ID_EQUIPE))));
127  }
128 
129  return equipes;
130  }
131 
137  private Vector<Joueur> getJoueurEquipe(int idEquipe)
138  {
139  Vector<Joueur> joueurs = new Vector<Joueur>();
140  String requete = "SELECT * FROM Joueur WHERE idEquipe = " + Integer.toString(idEquipe);
141 
142  Cursor curseurResultat = effectuerRequete(requete);
143 
144  for (int i = 0; i < curseurResultat.getCount(); i++)
145  {
146  curseurResultat.moveToNext();
147  Log.d(TAG,"numeroLicence = " + curseurResultat.getString(INDEX_ID_JOUEUR) + " | " + "nom = " + curseurResultat.getString(INDEX_NOM_JOUEUR) + " | " + "prenom = " + curseurResultat.getString(INDEX_PRENOM_JOUEUR));
148  joueurs.add(new Joueur(curseurResultat.getString(INDEX_NOM_JOUEUR),curseurResultat.getString(INDEX_PRENOM_JOUEUR),curseurResultat.getInt(INDEX_ID_JOUEUR)));
149  }
150 
151  return joueurs;
152  }
153 
159  private Joueur getJoueur(int numeroLicence)
160  {
161  Joueur joueur;
162  String requete = "SELECT * FROM Joueur WHERE numeroLicence = " + Integer.toString(numeroLicence);
163  Cursor curseurResultat = effectuerRequete(requete);
164 
165  if(curseurResultat.getCount() == 0)
166  return null;
167 
168  curseurResultat.moveToNext();
169  Log.d(TAG,"numeroLicence = " + curseurResultat.getString(INDEX_ID_JOUEUR) + " | " + "nom = " + curseurResultat.getString(INDEX_NOM_JOUEUR) + " | " + "prenom = " + curseurResultat.getString(INDEX_PRENOM_JOUEUR));
170  joueur = new Joueur(curseurResultat.getString(INDEX_NOM_JOUEUR),curseurResultat.getString(INDEX_PRENOM_JOUEUR),curseurResultat.getInt(INDEX_ID_JOUEUR));
171 
172  return joueur;
173  }
174 
180  public Vector<Partie> getParties(int idRencontre)
181  {
182  Vector<Partie> parties = new Vector<Partie>();
183  Vector<Joueur> joueursA = new Vector<Joueur>();
184  Vector<Joueur> joueursB = new Vector<Joueur>();
185 
186  String requete = "SELECT * FROM Partie WHERE idRencontre = " + Integer.toString(idRencontre);
187 
188  Cursor curseurResultat = effectuerRequete(requete);
189 
190  for (int i = 0; i < curseurResultat.getCount(); i++)
191  {
192  curseurResultat.moveToNext();
193  Log.d(TAG,"idPartie = " + curseurResultat.getString(INDEX_ID_PARTIE) + " | " + "idRencontre = " + curseurResultat.getString(INDEX_ID_RENCONTRE) + " | " + "idJoueurA = " + curseurResultat.getString(INDEX_ID_JOUEUR_A) + " | " + " idJoueurB = " + curseurResultat.getString(INDEX_ID_JOUEUR_B) + " | " + " idJoueurW = " + curseurResultat.getString(INDEX_ID_JOUEUR_W)+ " | " + " idJoueurX = " + curseurResultat.getString(INDEX_ID_JOUEUR_X) + " | " + " typePartie = " + curseurResultat.getString(INDEX_TYPE_PARTIE) + " | " + " fin = " + curseurResultat.getString(INDEX_FIN_PARTIE));
194 
195  joueursA.add(getJoueur(curseurResultat.getInt(INDEX_ID_JOUEUR_A)));
196  joueursB.add(getJoueur(curseurResultat.getInt(INDEX_ID_JOUEUR_W)));
197 
198  if (curseurResultat.getInt(INDEX_TYPE_PARTIE) == TYPE_PARTIE_DOUBLE)
199  {
200  joueursA.add(getJoueur(curseurResultat.getInt(INDEX_ID_JOUEUR_B)));
201  joueursB.add(getJoueur(curseurResultat.getInt(INDEX_ID_JOUEUR_X)));
202  }
203 
204  parties.add(new Partie(curseurResultat.getInt(INDEX_NB_MANCHES_GAGNANTES),curseurResultat.getInt(INDEX_NB_POINTS_PAR_MANCHES),(Vector<Joueur>)joueursA.clone(),(Vector<Joueur>)joueursB.clone(),curseurResultat.getInt(INDEX_ID_PARTIE)));
205 
206  if (curseurResultat.getString(INDEX_FIN_PARTIE) != null)
207  parties.lastElement().setEstFinie(true);
208 
209  parties.lastElement().setManches(getSetsPartie(parties.lastElement().getId()));
210 
211  joueursA.clear();
212  joueursB.clear();
213  }
214 
215  return parties;
216  }
217 
222  public void insererParties(Rencontre rencontre)
223  {
224  Vector<Partie> parties = rencontre.getParties();
225  ListIterator<Partie> it = parties.listIterator();
226  String requete = "";
227  Partie partie = null;
228 
229  while(it.hasNext())
230  {
231  partie = it.next();
232  if (partie.getJoueursA().size() > 1)
233  requete = DEBUT_REQUETE_INSERTION_PARTIE + Integer.toString(rencontre.getId()) + "," + Integer.toString(partie.getJoueursA().elementAt(Partie.POSITION_PREMIER_JOUEUR).getNumLicence()) + "," + Integer.toString(partie.getJoueursA().elementAt(Partie.POSITION_DEUXIEME_JOUEUR).getNumLicence()) + "," + Integer.toString(partie.getJoueursB().elementAt(Partie.POSITION_PREMIER_JOUEUR).getNumLicence()) + "," + Integer.toString(partie.getJoueursB().elementAt(Partie.POSITION_DEUXIEME_JOUEUR).getNumLicence()) + "," + Integer.toString(rencontre.getNbManchesGagnantes()) + "," + Integer.toString(rencontre.getNbPointsParManche()) + ",2," + "'2021-01-29 08:15:00')";
234  else
235  requete = DEBUT_REQUETE_INSERTION_PARTIE + Integer.toString(rencontre.getId()) + "," + Integer.toString(partie.getJoueursA().elementAt(Partie.POSITION_PREMIER_JOUEUR).getNumLicence()) + "," + Integer.toString(partie.getJoueursA().elementAt(Partie.POSITION_PREMIER_JOUEUR).getNumLicence()) + "," + Integer.toString(partie.getJoueursB().elementAt(Partie.POSITION_PREMIER_JOUEUR).getNumLicence()) + "," + Integer.toString(partie.getJoueursB().elementAt(Partie.POSITION_PREMIER_JOUEUR).getNumLicence()) + "," + Integer.toString(rencontre.getNbManchesGagnantes()) + "," + Integer.toString(rencontre.getNbPointsParManche()) + ",1," + "'2021-01-29 08:15:00')";
236 
237  Log.d(TAG,"insererParties() : " + requete);
238  ouvrir();
239  bdd.execSQL(requete);
240  }
241  }
242 
248  public int getIdEquipe(String nomEquipe)
249  {
250  Cursor curseurResultat = effectuerRequete(DEBUT_REQUETE_ID_EQUIPE + nomEquipe + "'");
251  curseurResultat.moveToNext();
252  if (curseurResultat.getCount() == 1)
253  return (curseurResultat.getInt(0));
254  return -1;
255  }
256 
262  public Equipe insererEquipe(Equipe equipe)
263  {
264  ouvrir();
265  bdd.execSQL(DEBUT_REQUETE_INSERTION_EQUIPE + equipe.getNomClub() + "'");
266  Cursor curseurResultat = effectuerRequete(REQUETE_ID_EQUIPE);
267  curseurResultat.moveToNext();
268  equipe.setId(curseurResultat.getInt(0));
269 
270  return equipe;
271  }
272 
278  public boolean verifierPresenceJoueur(int idJoueur)
279  {
280  Cursor curseurResultat = effectuerRequete(DEBUT_REQUETE_PRESENCE_JOUEUR + idJoueur + "'");
281  if (curseurResultat.getCount() == 0)
282  return false;
283  return true;
284  }
285 
291  public void insererJoueur(Joueur joueur,Equipe equipe)
292  {
293  ouvrir();
294  bdd.execSQL(DEBUT_REQUETE_INSERTION_JOUEUR + Integer.toString(joueur.getNumLicence()) + "," + Integer.toString(equipe.getId()) + ",'" + joueur.getNom() + "','" + joueur.getPrenom() + "')");
295  }
296 
303  {
304  if (getIdEquipe(equipe.getNomClub()) == -1)
305  {
306  Log.d(TAG,"insererRencontre() Nouvelle équipe");
307  equipe = insererEquipe(equipe);
308  }
309 
310  return equipe;
311  }
312 
317  private void insererJoueursEquipe(Equipe equipe)
318  {
319  for (int i=0; i < equipe.getJoueurs().size(); i++)
320  {
321  if (!verifierPresenceJoueur(equipe.getJoueurs().elementAt(i).getNumLicence()))
322  insererJoueur(equipe.getJoueurs().elementAt(i),equipe);
323  }
324  }
325 
332  {
333  String requete = "";
334 
335  rencontre.setEquipeA(verifierPresenceEquipe(rencontre.getEquipeA()));
336  rencontre.setEquipeB(verifierPresenceEquipe(rencontre.getEquipeB()));
337 
338  insererJoueursEquipe(rencontre.getEquipeA());
339  insererJoueursEquipe(rencontre.getEquipeB());
340 
341  requete = DEBUT_REQUETE_INSERTION_RENCONTRE + Integer.toString(rencontre.getEquipeA().getId()) + "," + Integer.toString(rencontre.getEquipeB().getId()) + "," + Integer.toString(rencontre.getNbPartiesGagnantes()) + "," + FIN_REQUETE_INSERTION_RENCONTRE;
342  bdd.execSQL(requete);
343  Cursor curseurResultat = effectuerRequete(REQUETE_ID_RENCONTRE);
344  curseurResultat.moveToNext();
345  rencontre.setId(curseurResultat.getInt(0));
346 
347  Log.d(TAG,"insererRencontre() : Insertion de la rencontre avec l'ID : " + Integer.toString(rencontre.getId()));
348 
349  return rencontre;
350  }
351 
356  public void terminerPartie(int idPartie)
357  {
358  String requete = DEBUT_REQUETE_TERMINER_PARTIE + Integer.toString(idPartie);
359  bdd.execSQL(requete);
360  }
361 
366  public void commencerSet(Partie partie)
367  {
368  Log.d(TAG,"commencerSet()");
369  ouvrir();
370  String requete = "SELECT * FROM SCORE WHERE idPartie=" + Integer.toString(partie.getId()) + " AND numeroSet=" + Integer.toString(partie.getManches().size());
371  // INSERT INTO Score(idPartie,numeroSet, pointsJoueurEquipeA, pointsJoueurEquipeB, debut) VALUES (1,3,0,0,DATETIME('now'));
372  Cursor curseurResultat = effectuerRequete(requete);
373  if (curseurResultat.getCount() == 0)
374  {
375  requete = "INSERT INTO Score(idPartie,numeroSet, pointsJoueurEquipeA, pointsJoueurEquipeB, debut) VALUES (" + Integer.toString(partie.getId()) + "," + Integer.toString(partie.getManches().size()) + ",0,0,DATETIME('now'))";
376  Log.d(TAG, "commencerSet() : " + requete);
377  bdd.execSQL(requete);
378  }
379  }
380 
385  public void terminerSet(Partie partie)
386  {
387  Log.d(TAG,"terminerSet()");
388  ouvrir();
389  // UPDATE Score SET fin=DATETIME('now'), pointsJoueurEquipeA=11, pointsJoueurEquipeB='9' WHERE idPartie='1' AND numeroSet='3';
390  String requete = "UPDATE Score SET fin=DATETIME('now'),pointsJoueurEquipeA=" + Integer.toString(partie.getManches().lastElement().elementAt(0)) + ",pointsJoueurEquipeB=" + Integer.toString(partie.getManches().lastElement().elementAt(1)) + " WHERE idPartie=" + Integer.toString(partie.getId()) + " AND numeroSet=" + Integer.toString(partie.getManches().size()-1) +"";
391  Log.d(TAG,"terminerSet() : " + requete);
392  bdd.execSQL(requete);
393  }
394 
400  public Vector<Vector<Integer>> getSetsPartie(int idPartie)
401  {
402  Log.d(TAG,"getSetsPartie()");
403  ouvrir();
404  Vector<Vector<Integer>> manches = new Vector<>();
405  Vector<Integer> mancheActuelle = new Vector<Integer>();
406  String requete = "SELECT pointsJoueurEquipeA,pointsJoueurEquipeB FROM Score WHERE idPartie=" + Integer.toString(idPartie);
407  Cursor curseurResultat = effectuerRequete(requete);
408 
409  for (int i= 0; i < curseurResultat.getCount(); i++)
410  {
411  curseurResultat.moveToNext();
412  Log.d(TAG,"getSetsPartie() : Score joueurA = " + curseurResultat.getString(0));
413  Log.d(TAG,"getSetsPartie() : Score joueurB = " + curseurResultat.getString(1));
414  mancheActuelle.add(curseurResultat.getInt(0));
415  mancheActuelle.add(curseurResultat.getInt(1));
416  manches.add((Vector<Integer>) mancheActuelle.clone());
417  mancheActuelle.clear();
418  }
419 
420  return manches;
421  }
422 }
void ouvrir()
Ouvre un accés à la base de données.
static final String REQUETE_ID_RENCONTRE
static final int INDEX_ID_JOUEUR_B
void setId(int id)
Definition: Equipe.java:96
int getNumLicence()
Accesseur de l&#39;attribut numLicence.
Definition: Joueur.java:77
Equipe getEquipeA()
Accesseur de l&#39;attribut equipeA.
Definition: Rencontre.java:178
Vector< Vector< Integer > > getSetsPartie(int idPartie)
Permet d&#39;effectuer une requete pour réuperer les sets d&#39;une partie.
void insererJoueur(Joueur joueur, Equipe equipe)
Permet d&#39;effectuer une requete pour insérer un joueur.
void setEquipeB(Equipe equipe)
Definition: Rencontre.java:248
static final String DEBUT_REQUETE_INSERTION_JOUEUR
void insererParties(Rencontre rencontre)
Permet d&#39;effectuer une requete pour insérer les parties d&#39;une rencontre.
Vector< Joueur > getJoueursA()
Accesseur de l&#39;attribut joueursA.
Definition: Partie.java:79
int getId()
Accesseur de l&#39;attribut iD.
Definition: Partie.java:127
static final int INDEX_ID_JOUEUR_W
boolean verifierPresenceJoueur(int idJoueur)
Permet d&#39;effectuer une pour vérifier la présence d&#39;un joueur en BDD.
static final int INDEX_NB_MANCHES_GAGNANTES
Rencontre insererRencontre(Rencontre rencontre)
Permet d&#39;effectuer une requete pour insérer une rencontre.
void setEquipeA(Equipe equipe)
Definition: Rencontre.java:243
static final String REQUETE_ID_EQUIPE
Vector< Joueur > getJoueurs()
Accesseur de la l&#39;attribut joueurs.
Definition: Equipe.java:69
String getNom()
Accesseur de l&#39;attribut nom.
Definition: Joueur.java:45
Equipe verifierPresenceEquipe(Equipe equipe)
Permet d&#39;effectuer une requete pour vérifier la présence d&#39;une équipe en BDD et l&#39;insère si elle n&#39;es...
BaseDeDonnees(Context context)
Constructeur de la classe BaseDeDonnees.
Vector< Joueur > getJoueursB()
Accesseur de l&#39;attribut joueursB.
Definition: Partie.java:87
static final String DEBUT_REQUETE_PRESENCE_JOUEUR
static final int INDEX_ID_RENCONTRE
static final int INDEX_TYPE_PARTIE
String getPrenom()
Accesseur de l&#39;attribut prenom.
Definition: Joueur.java:53
static final int INDEX_ID_JOUEUR_A
Equipe insererEquipe(Equipe equipe)
Permet d&#39;effectuer une requete pour insérer une équipe.
Vector< Vector< Integer > > getManches()
Definition: Partie.java:145
void terminerPartie(int idPartie)
Permet d&#39;effectuer une requete terminer une partie.
static final String DEBUT_REQUETE_TERMINER_PARTIE
Cursor effectuerRequete(String requete)
Permet d&#39;effectuer une requete sur la base de données.
static final String DEBUT_REQUETE_INSERTION_RENCONTRE
Joueur getJoueur(int numeroLicence)
Permet d&#39;effectuer une requete pour récupérer un joueur grâce à son numéro de licence.
void terminerSet(Partie partie)
Permet d&#39;effectuer une requete pour terminer un set.
Classe qui permet la création de la base de données.
Definition: SQLiteAREA.java:18
int getNbPartiesGagnantes()
Accesseur de l&#39;attribut nbPartiesGagnantes.
Definition: Rencontre.java:214
int getIdEquipe(String nomEquipe)
Permet d&#39;effectuer une requete pour récupérer l&#39;identifiant d&#39;une équipe grâce à son nom...
static final String FIN_REQUETE_INSERTION_RENCONTRE
static final String DEBUT_REQUETE_INSERTION_PARTIE
static final String DEBUT_REQUETE_INSERTION_EQUIPE
Vector< Equipe > getEquipes()
Permet d&#39;effectuer une requete pour récupérer toutes les équipes.
Classe qui permet la gestion d&#39;une rencontre entre deux équipes.
Definition: Rencontre.java:18
Classe permettant de manipuler la base de données.
static final int INDEX_NB_POINTS_PAR_MANCHES
static final int INDEX_PRENOM_JOUEUR
final String getNomClub()
Accesseur de la l&#39;attribut nomClub.
Definition: Equipe.java:61
Classe regroupant les informations d&#39;une équipe.
Definition: Equipe.java:21
Vector< Joueur > getJoueurEquipe(int idEquipe)
Permet d&#39;effectuer une requete pour récupérer tout les joueurs d&#39;une équipe.
static final int POSITION_DEUXIEME_JOUEUR
Definition: Partie.java:29
Classe regroupant les informations d&#39;un joueur.
Definition: Joueur.java:18
int getNbManchesGagnantes()
Accesseur de l&#39;attribut nbManchesGagnantes.
Definition: Rencontre.java:205
static final int TYPE_PARTIE_SIMPLE
void fermer()
Ferme l&#39;accés à la base de données.
int getNbPointsParManche()
Accesseur de l&#39;attribut nbPointsParManche.
Definition: Rencontre.java:223
Classe permettant la gestion d&#39;une partie.
Definition: Partie.java:22
void commencerSet(Partie partie)
Permet d&#39;effectuer une requete pour commencer un set.
static final String DEBUT_REQUETE_ID_EQUIPE
static final int INDEX_ID_JOUEUR_X
Equipe getEquipeB()
Accesseur de l&#39;attribut equipeB.
Definition: Rencontre.java:187
void insererJoueursEquipe(Equipe equipe)
Permet d&#39;effectuer une requete pour insérer les joueurs d&#39;une équipe.
Vector< Partie > getParties()
Accesseur de l&#39;attribut parties.
Definition: Rencontre.java:169
static final int POSITION_PREMIER_JOUEUR
Definition: Partie.java:28
static final int TYPE_PARTIE_DOUBLE
Vector< Partie > getParties(int idRencontre)
Permet d&#39;effectuer une requete pour récupérer les parties d&#39;une rencontre.