package Test; /* [BPakage.BDatabase] * Desc: To create Operationnal Database Link fast :) * GitHub: https://github.com/lalBi94 * Created by: Bilal Boudjemline * 28/09/2022 at 20:35 * */ import API.*; import MNP.*; import java.sql.*; import java.sql.Connection; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import org.mariadb.jdbc.*; /** *

Methodes pour les interaction avec une base de donnees

* * @author Bilal Boudjemline */ public class BDatabase { private final String db_host; private final String db_name; private final String db_user; private final String db_password; protected Connection sharedObject; private boolean status; public BDatabase() { this.db_host = "jdbc:mariadb://dwarves.iut-fbleau.fr/"; this.db_name = "brinet"; this.db_user = "brinet"; this.db_password = "Aignan41!"; try { Class.forName("org.mariadb.jdbc.Driver"); } catch(ClassNotFoundException e) { e.printStackTrace(); } try { this.sharedObject = DriverManager.getConnection(this.db_host + this.db_name, this.db_user, this.db_password); this.status = true; } catch (SQLException e) { System.out.println("Erreur de liaison avec la base de donnees."); } } /** * Recuperer les informations d'un requete de type SELECT. * * @param request Le SELECT a faire (il y aura plus d'argument prochainement) * @return Les resultats engendre par la requete */ public ArrayList fetchAll(String request) { try { ArrayList toReturn = new ArrayList(); ResultSet rs = this.sharedObject.prepareStatement(request).executeQuery(); for(int i = 0; rs.next(); i++) { toReturn.add(i, String.valueOf(rs.getString(1))); } return toReturn; } catch(SQLException e) { System.out.println("Erreur de la requete : " + e); return null; } } /** * Insert une ligne dans une table. * * @param table La table * @param col Tableau qui contient les colonnes d'affectation * @param value Valeur des colonnes * @return Retourne true si ca a reussit et false dans le cas inverse */ public boolean insertRow(String table, String[] col, String[] value) { StringBuilder collumns = new StringBuilder(); StringBuilder values = new StringBuilder(); Iterator iteCol = Arrays.stream(col).iterator(); Iterator iteVal = Arrays.stream(value).iterator(); collumns.append("("); while(iteCol.hasNext()) { collumns.append(iteCol.next()).append(", "); } collumns.setLength(collumns.length()-2); collumns.append(")"); values.append("("); while(iteVal.hasNext()) { values.append("\"").append(iteVal.next()).append("\"").append(", "); } values.setLength(values.length()-2); values.append(")"); String request = "INSERT INTO " + table + collumns + " VALUES" + values + ";"; System.out.println(request); try { this.sharedObject.prepareStatement(request).executeQuery(); System.out.println("Succes: " + request); return true; } catch(SQLException e) { return false; } } /** * Faire des requetes de type UPDATE SET (il y aura plus d'argument prochainement). * * @param request La requete * @return Si oui ou non ca a fonctionne */ public boolean updateRow(String request) { try { this.sharedObject.prepareStatement(request).executeQuery(); return true; } catch(SQLException e) { return false; } } /** * Recuperer l'objet Connection pour pouvoir utiliser ses methodes. * * @return L 'objet Connection. */ public Connection getSharedObject() { return this.sharedObject; } /** * Recuperer l'utilisateur courant. * * @return L 'utilisateur. */ public String getUser() { return this.db_user; } /** * Recuperer la liste des etudiants (FIProjet Contexte) * * @return La liste des etudiants * */ public ArrayList getEtuList() { ArrayList listEtu = new ArrayList<>(); ArrayList studPrenom = this.fetchAll("SELECT prenom FROM fi_eleves"); ArrayList studNom = this.fetchAll("SELECT nom FROM fi_eleves"); ArrayList studGroupe = this.fetchAll("SELECT groupe FROM fi_eleves"); for(int i = 0; i <= studPrenom.size()-1; i++) { if(studPrenom.get(i) != null && studNom.get(i) != null && studGroupe.get(i) != null) { try { listEtu.add( new EtudiantNP( studNom.get(i), studPrenom.get(i), Integer.parseInt(studGroupe.get(i), 10) ) ); } catch(NumberFormatException ignore) { listEtu.add( new EtudiantNP( studNom.get(i), studPrenom.get(i), -1 ) ); } } else { System.out.println("[!] Erreur lors du chargement de la liste des etudiants."); System.exit(-1); } } System.out.println("[+] Liste des etudiants chargee."); return listEtu; } /** * Recuperer la liste des groupes (FIProjet contexte) * * @return La liste des groupes * */ public ArrayList getGroupeList() { ArrayList listGroupe = new ArrayList<>(); ArrayList groupeId = this.fetchAll("SELECT id FROM fi_groupe"); ArrayList groupeNom = this.fetchAll("SELECT nom FROM fi_groupe"); ArrayList groupeMin = this.fetchAll("SELECT min FROM fi_groupe"); ArrayList groupeMax = this.fetchAll("SELECT max FROM fi_groupe"); for(int i = 0; i <= groupeNom.size()-1; i++) { if(groupeId.get(i) != null && groupeNom.get(i) != null && groupeMin.get(i) != null && groupeMax.get(i) != null) { listGroupe.add( new GroupeNP( Integer.parseInt(groupeId.get(i), 10), groupeNom.get(i), Integer.parseInt(groupeMin.get(i), 10), Integer.parseInt(groupeMax.get(i), 10) ) ); } else { System.out.println("[!] Erreur lors du chargement de la liste des groupes."); System.exit(-1); } } System.out.println("[+] Liste des groupes chargees."); return listGroupe; } /** * Recuperer l'hote courant. * * @return L 'hote. */ public String getHost() { return this.db_host; } /** * Recuperer le nom de la base de donnees. * * @return Le nom de la base de donnees. */ public String getDatabaseName() { return this.db_name; } /** * Recuperer le status de connection. * * @return Le status de connection. */ public boolean getStatus() { return this.status; } @Override public String toString() { return this.db_host + "\n" + this.db_name + "\n" + this.db_user + "\n"; } }