IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Projet d'application en Java : Interaction Java / BDD en JDBC


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 44
    Par défaut Projet d'application en Java : Interaction Java / BDD en JDBC
    Bonjour,

    Pour un projet d'école je souhaiterais créer une appli de gestion de salon. Je la veut très très simple . Voici le MCD que j'ai crée :

    Nom : gestionSalon.JPG
Affichages : 894
Taille : 86,9 Ko

    L'idée est d'avoir une interface où le coiffeur pourra selectionner :
    Son client qu'il à coiffer ( Client ), lui même ( Coiffeur ), la prestation effectué etc coupe .. ( Prestation + typePrestation ) . A la fin de la selection : une validation qui met toutes ses informations dans la table prestationsEffectuees.
    De sorte à pouvoir afficher toutes les informations de la table prestationsEffectuees comme : Le nombre de prestations enregistrés, le nb de prestation par coiffeur, ....

    J'ai ensuite commencé à créer mes classes sous eclipse, mais c'est là où j'ai du mal . Je sais qu'avec la programmation orientée objet il faut une classe par table.. Cependant comment faire ma classe typePrestation ? Comment relier les classes entre elles ?

    J'ai essayé avec un hashmap, voici ma classe Prestations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    import java.util.HashMap;
     
     
    public class Prestations {
    	private int dateHeure;
    	private HashMap<String,Float> listePresta =  new HashMap<String,Float>();
     
     
    	public Prestations(int dateHeure) {
    		super();
    		this.dateHeure = dateHeure;
    	}
     
    	public Prestations(){}
     
    	public HashMap<String, Float> getListePresta() {
    		return listePresta;
    	}
     
    	public void setListePresta(HashMap<String, Float> listePresta) {
    		this.listePresta = listePresta;
    	}
     
    	public int getDateHeure() {
    		return dateHeure;
    	}
     
     
    	public void setDateHeure(int dateHeure) {
    		this.dateHeure = dateHeure;
    	}
     
     
    // Ajoute une prestation
    public void addPrestation(Prestations prestations){
    	this.listePresta.add(prestations);
    }
    //Supprime une prestation
    public void removePrestation(Prestations prestations){
    	this.listePresta.remove(prestations);
    }
    Mais j'ai du mal à l'utiliser ..

    Pour les classes coiffeur et client j'ai mis tous les attributs avec le constructeur, les setters et getters.

    Puis je ne vois pas comment faire non plus la classe prestationsEffectuees. ( Dois-je utiliser l'héritage ou autre ? )

    J'aimerais avoir une orientation sur comment coder tout ça ( ne me donnez pas de code tout fait, j'aimerais comprendre seulement et pratiquer moi même ).

    En vous remerciant .

  2. #2
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 3
    Par défaut
    Bonjour fa_dev,

    comme tu l'as dit toi même, tu programmes dans un langage orienté objet.

    De ce fait, tu dois envisager ta classe TypePrestation comme un objet, composé d'un libellé et d'un prix. Cet objet sera alors déclaré comme un attribut de ta classe Prestation.
    Pour accéder au libellé de ta Prestation, tu dois d'abord récupérer l'objet TypePrestation de ta Prestation, et ensuite accéder au libellé de cet objet.
    Je te donne un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Voiture {
        private String marque;
        private String modele;
        private Moteur moteur;
    ...
    }
     
    public class Moteur {
        private String marque;
        private int puissanceFiscale;
        private float prix;
    ...
    }
    Pour ce qui est de l'utilisation de la HashMap, je ne crois pas que ce soit approprié. Lorsque tu déclares HashMap<String, Float>, il faut bien comprendre que la String est une clé et le Float une valeur. Cela veut dire que ta map aura comme liste de clés les libellés de tes prestations et comme valeurs associées à ces clés les prix de tes prestations. Cela est trop complexe pour l'utilisation que tu décris.

    Pour finir sur la classe PrestationsEffectuées, cette classe sera composée de trois objets. Un objet Client, un objet Coiffeur et un objet Prestation. Ce modèle fonctionne uniquement à cause des cardinalités que tu indiques dans ton diagramme.

    En espérant t'avoir aidé, ne serait-ce qu'un peu.

    Cordialement,
    JuPer71

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 44
    Par défaut
    Merci beaucoup pour ta réponse très claire ! Ca m'a vraiment aidé à comprendre.
    Du coup je n'ai besoin d'aucun objet de Collection ?

    Un résumé de ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class Prestations {
    	private int dateHeure;
    	private TypePrestation typePrestation; }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class TypePrestation {
    	private String nomPrestation;
    	private int prix; }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class prestationEffectuee {
     
    	private Client client;
    	private Coiffeur coiffeur;
    	private Prestations prestations;
    + constructeur / Getters / setters pour tous.

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 3
    Par défaut
    C'est exactement ça.

    Le problème de la HashMap, c'est que chacun de tes objets Prestation aurait contenu une map contenant tous les types de prestations. Or toi, tu veux uniquement le type de ta prestation.

    Ton code répond donc à ton besoin et est bien écrit.

    Voilà.
    Bon courage pour la suite.
    A plus.

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 44
    Par défaut
    Je continue dans mon projet..
    J'ai adapté mon DAO pour le projet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    package DAO;
     
    import java.sql.Connection;
    import java.sql.SQLException;
     
    public abstract class DAO<T> {
     
    		public static Connection getConnexion() throws ClassNotFoundException, SQLException 
            {
    	     Connection cnx = Connect.getInstance().getConnection();
    	        return cnx;
    	    }
     
    	  public abstract int create(T obj) throws ClassNotFoundException, SQLException;
     
    	  public abstract int delete(int id) throws ClassNotFoundException, SQLException ;
     
    	  public abstract boolean update(T obj);
     
    	  public abstract T find(int id);
     
     
    }
    Un exemple de ma classe coiffeurDAO :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    package DAO;
     
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
     
    import bean.Coiffeur;
     
    public class CoiffeurDAO extends DAO<Coiffeur> {
     
     
    	public int create(Coiffeur coiffeur) throws ClassNotFoundException, SQLException {
    		Connection cnx = getConnexion();
     
            PreparedStatement pst = null;
            int nblignes = 0;
     
            String requeteSQL = "INSERT INTO coiffeur (nom, prenom) values(?, ?)";
     
            System.out.println("beforexecute");
            pst = cnx.prepareStatement(requeteSQL);
     
            pst.setString(1, coiffeur.getNomCoiffeur());
            pst.setString(2, coiffeur.getPrenomCoiffeur());
     
     
            try {
                nblignes = pst.executeUpdate();
            } catch (SQLException ex) {
                System.out.println(ex.getMessage());
            }
            pst.close();
            cnx.close();
            return nblignes;
    	}
     
    	@Override
    	public int delete(int  id) throws ClassNotFoundException, SQLException {   
            Connection cnx = getConnexion();
     
            PreparedStatement pst = null;
            int nblignes = 0;
     
            String requeteSQL = "DELETE from coiffeur where id ="+id;
     
            System.out.println("beforexecute");
            pst = cnx.prepareStatement(requeteSQL);
     
            try {
                nblignes = pst.executeUpdate();
            } catch (SQLException ex) {
                System.out.println(ex.getMessage());
            }
            pst.close();
            cnx.close();
            return nblignes;
     
        }
    J'ai juste du mal avec la classe prestationsDAO :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    public class PrestationsDAO extends DAO<Prestations> {
     
     
    	public int create(Prestations prestations) throws ClassNotFoundException, SQLException {
    		Connection cnx = getConnexion();
     
            PreparedStatement pst = null;
            int nblignes = 0;
     
            String requeteSQL = "INSERT INTO prestations (dateheureprestation, ) values(?, ?)";   // + L'id typePrestation ??
     
            System.out.println("beforexecute");
            pst = cnx.prepareStatement(requeteSQL);
     
            pst.setInt(1, prestations.getDateHeurePrestation());
            pst.setTypePrestation(2, prestations.getTypePrestation());  // Comment déclarer l'objet TypePrestation ?
     
            try {
                nblignes = pst.executeUpdate();
            } catch (SQLException ex) {
                System.out.println(ex.getMessage());
            }
            pst.close();
            cnx.close();
            return nblignes;
    	}
    Question : Comment est ce que je déclare mon objet TypePrestation ? Car je suis sencé envoyé à ma bdd l'id du typePrestation choisi.. Je bloque .
    Puis le même problème dans la classe PrestationsEffectueesDAO :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public int create(prestationEffectuee prestationEffectuee) {  // A REVOIR. COMMENT RELIER LES ID ?
    		Connection cnx = getConnexion();
     
            PreparedStatement pst = null;
            int nblignes = 0;
     
            String requeteSQL = "INSERT INTO prestationeffectuee (, ) values(?, ?, ?)";
     
            System.out.println("beforexecute");
            pst = cnx.prepareStatement(requeteSQL);
     
            pst.setClient(1, prestationEffectuee.getClient());  // ??
            pst.setString(2, prestationEffectuee.getCoiffeur());  // ??
     
     
            try {
                nblignes = pst.executeUpdate();
            } catch (SQLException ex) {
                System.out.println(ex.getMessage());
            }
            pst.close();
            cnx.close();
            return nblignes;
    	}
    Je voudrais récupérer les ID comme dit dans le MCD de mon premier post.

    Merci à vous !

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tu pêux récupérer l'id de l'enregistrement inséré par la méthode getGeneratedKeys().
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. XsdException lors de l'excécution d'un projet maven application Java
    Par Lestricker dans le forum Général Java
    Réponses: 4
    Dernier message: 04/11/2016, 13h02
  2. Lancer les projet HP QTP depuis une application Java
    Par viejo dans le forum Débuter
    Réponses: 6
    Dernier message: 23/02/2013, 23h22
  3. Projet d'application Java - Casse-Bateaux
    Par Baboulinet_ dans le forum Langage
    Réponses: 8
    Dernier message: 30/11/2011, 09h51
  4. Projet application java avec mutijoueur via bluetooth
    Par oliver-14 dans le forum Développement Mobile en Java
    Réponses: 3
    Dernier message: 03/10/2008, 09h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo