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

avec Java Discussion :

If /Else & Switch case avec plusieurs paramètres


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 39
    Points : 23
    Points
    23
    Par défaut If /Else & Switch case avec plusieurs paramètres
    Bonjour,
    Voilà, ce n'est pas vraiment un problème technique que j'ai. Pour illustrer mon cas, je vous simplifie. J'ai un interface graphique fait avec swing et awt. Il y a un formulaire des checkbox et des listes déroulantes. Dans ces derniers des critères, par défaut ils sont à "Tous".
    Il y a 5 critères :
    - couleurs
    - formes
    - matières
    - poids
    - textures
    En moteur j'ai une base de données qui stocke ces objets. Un objet ayant 5 caractères.
    Avec le fomulaire, l'utilisateur peut choisir 1,2,3,4 ou 5 critères. Du coup en fonction des résultats du formulaire, la requete varie.
    De ce fait je fais des if ... else... imbriqués!!! il y en a environ 40!!!! du coup c'est pas très "propre".
    ça donne quelque chose comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if (couleurs == c) xxxx
    else {
        if ((couleurs == c) && (formes == f)) xxxxx
        else {
             if ((couleurs == c) && (formes == f) && (matières == m)) xxxxx 
             else {
                  .....
             }
        }
    }
    vous voyez le "bordel" dont je parle, associer toute les combinaisons possible (seul, par 2,3 ou 4)
    Le plus simple aurait été un switch case, mais dans mes faibles connaissances, celui-ci ne teste qu'une valeur à la fois.

    Existe -t-il un moyen plus propre et simple de faire ça??

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par ralek Voir le message
    De ce fait je fais des if ... else... imbriqués!!! il y en a environ 40!!!! du coup c'est pas très "propre".
    Ca fait vraiment beaucoup en effet...

    C'est quoi comme "requete" ? On pourrait avoir un exemple ?

    a++

  3. #3
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Points : 402
    Points
    402
    Par défaut
    ne peut tu pas faire ta requête en plusieurs parties ? je m'explique :

    Prenons un string contenant ta requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String laRequête = "debut requête";
    premier switch case testant la couleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Switch(Color)
           case 1: laRequête+="couleur bleu";
    deuxième Switch case pour la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Switch(Forme)
           case 1: laRequête+="forme rectangle";
    etc...

    et au final :

    taRequête = "debut requête couleur bleu forme rectangle";

    Après je ne suis pas spécialiste des requêtes SQL mais il me semble qu'avec des "inner join" ou quelaue chose du genre tu peux construire des requêtes sur ce principe...

    En espérant avoir pu t'aider...
    C'est en aidant les autres qu'on en apprend beaucoup soi-même

  4. #4
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 39
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    Ca fait vraiment beaucoup en effet...

    C'est quoi comme "requete" ? On pourrait avoir un exemple ?

    a++
    ce sont des requetes SQL dont je parle.


    Grosso modo, j'ai une table objet, en fonction de ce que j'ai récupéré par exemple couleur = vert, forme = rond via le formulaire, alors je fais une requete en SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     select * from object where couleur = vert and forme = rond
    C'est une sorte de filtrage avec plusieurs combinaisons possibles si vous voulez. En soi, mon programme tourne et tout, mais le code n'est pas très propre.

  5. #5
    Membre averti

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Points : 402
    Points
    402
    Par défaut
    et donc , la suggestion que je t'ai faite ne peut pas convenir ? car ca m'a l'air de coller assez bien à ce que tu recherches...
    C'est en aidant les autres qu'on en apprend beaucoup soi-même

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Donc tu as écrit en dur toutes les requêtes possibles


    Comme l'indique michon dans ce cas là il faut générer la requête morceau par morceau selon les sélections de l'utilisateur, en utilisant une StringBuilder pour créer la nouvelle requêtes.

    Exemple simpliste :
    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
    StringBuilder sb = new StringBuilder("select * from object");
    String separator = " where ";
     
    if (couleurs!=null) {
    	sb.append(separator).append(" couleur = ").append(couleurs);
    	separator = " and ";
    }
     
    if (formes!=null) {
    	sb.append(separator).append(" forme = ").append(formes);
    	separator = " and ";
    }
     
    if (matieres!=null) {
    	sb.append(separator).append(" matieres = ").append(matieres);
    	separator = " and ";
    }
     
    ... 
     
    String sql = sb.toString();

    a++

    PS : évites les accents dans les noms de variables

  7. #7
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 39
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Donc tu as écrit en dur toutes les requêtes possibles


    Comme l'indique michon dans ce cas là il faut générer la requête morceau par morceau selon les sélections de l'utilisateur, en utilisant une StringBuilder pour créer la nouvelle requêtes.



    PS : évites les accents dans les noms de variables
    Oui, j'ai écrit les requêtes en dur... mais j'en suis à la moitié, mais ton exemple simpliste m'inspire beaucoup...

    Merci à vous

Discussions similaires

  1. Switch case avec plusieurs valeurs par cas
    Par Med_be dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 07/04/2011, 13h16
  2. Réponses: 3
    Dernier message: 04/06/2007, 12h29
  3. [Système] Fonction avec plusieurs paramètres optionnels
    Par cerede2000 dans le forum Langage
    Réponses: 1
    Dernier message: 25/05/2007, 14h36
  4. [Struts 1.1][html:link] avec plusieurs paramètres
    Par bbo1991 dans le forum Struts 1
    Réponses: 3
    Dernier message: 21/03/2007, 12h32
  5. [Struts] Html:link avec plusieurs paramètres
    Par mariemor64 dans le forum Struts 1
    Réponses: 2
    Dernier message: 24/05/2006, 14h27

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