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 :

Recherche sur plusieurs champs.


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 58
    Points
    58
    Par défaut Recherche sur plusieurs champs.
    Bonjour a tous,

    J'ai crée un formulaire en java avec plusieurs champs (EAN,TTC min, TTC Max, Fournisseur, recherche de désignation) pouvant être remplis en même temps.(cf image ci dessous)
    Je souhaite faire une requête sql en fonction des champs qui seront saisit sachant que je veux prendre en compte chaque champs rempli.

    Mon problème : il y a 5 champs, il y a donc 5*5=25 possibilités de requete sql pour trouver le résultat.
    De plus, les expressions conditionnelles type switch ou if me semble être un vrai sac de nœud.

    Je me demandais si il ny' pas une possibilité de faire plus simple.

    Merci par avance.


  2. #2
    Membre éclairé
    Avatar de buggen25
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    554
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2008
    Messages : 554
    Points : 709
    Points
    709
    Par défaut
    bonjour;
    t'a pensé au triggers ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par buggen25 Voir le message
    bonjour;
    t'a pensé au triggers ?
    Non, mais je ne vois pas en quoi ca va resoudre mon probleme pour evaluer les conditions en fait.
    En effet, si j'utilise les triggers, il faudra quand meme faire une tonne de if avant de connaitre quel triggers lancer.

  4. #4
    Membre confirmé Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Points : 493
    Points
    493
    Par défaut
    Je comprend mal le problème. Tu fais un formulaire de recherche ? Si oui, alors tu peux considérer si par défaut les conditions sont cumulatives ou non et générer une seule requete sql dynamique en ajoutant chaque champ non null dans les clauses where.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select
       ...
    from
       ...
    where
       ...
       AND EAN = ou like ... (ligne ajoutee si EAN != null)
       AND TTCmin = ...      (ligne ajoutee si TTCmin != null)
       ....

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 58
    Points
    58
    Par défaut
    Je fais en effet un pseudo moteur de recherche multi-champs/criteres.

    Citation Envoyé par djsnipe Voir le message
    Je comprend mal le problème. Tu fais un formulaire de recherche ? Si oui, alors tu peux considérer si par défaut les conditions sont cumulatives ou non et générer une seule requete sql dynamique en ajoutant chaque champ non null dans les clauses where.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select
       ...
    from
       ...
    where
       ...
       AND EAN = ou like ... (ligne ajoutee si EAN != null)
       AND TTCmin = ...      (ligne ajoutee si TTCmin != null)
       ....

    Ton idée est intéressante, cependant je me pose deux questions :
    Voila comment je l'ai ecrit :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
           if ( !prixMini.getText().equals("TTC Mini"))
                {
                if  ( !prixMini.getText().equals(""))
                //Alors le champs est remplis il faut donc en tenir compte 
                mini="AND pa_ht>='"+prixMini.getText()+"'";
                }       
     
            if ( !prixMaxi.getText().equals("TTC Mini"))
                {
                if  ( !prixMaxi.getText().equals(""))
                //Alors le champs est remplis il faut donc en tenir compte 
                mini="AND pa_ht<='"+prixMaxi.getText()+"'";
                }
    Probleme, la premiere condition doit etre WHERE avant d'utiliser AND.
    Comment je peux savoir quand mettre where ou and ??

    Je suis peut etre pas tres clair

    Merci d'avance

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Perso, pour une écriture rapide, j'écrirais ma classe comme ça :

    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
     
    private String[] listeOperateur= {"=","<",">","<=",">="};
    private ArrayList listeValeur;
     
     
    private String ajouterClause(String pNomChamp, String pValeurChamp, int pOptionComparaison) {
     
    String vClause="";
    if (pValeurChamp!=null && !pValeurChamp.equals(""))
    {
       if (listeValeur.size()>0)
       {
         vClause+=" and ";
       }
       else
       {
         vClause+=" where ";
       }
       vClause+=pNomchamp+listeOperateur[pOptionComparaison]+"?";
       listeValeur.add(pValeurChamp);
    }
    return vClause;
     
    public ObjetRenvoye executerRequete(..à voir comment tu récupères tout ça..) {
       String vSql="Select ....#LISTE DE CHAMP#... from ...#NOM DE TABLE...";
       PreparedStatement vStatement;
       Resultset vResultset;
       Connection vConnexion;
       String vNomParametre;
       int vOperateur;
       String vValeurParametre;
     
       listeValeur=new ArrayList();
       for (clause de parcours des parametres)
       {
          Lecture des parametres;
          vSql+=ajouterClause(vNomParametre,vValeurParametre,vOperateur);
       }
       vConnexion = maclassedeConnexion.getConnexion();
       vStatement =vConnexion.prepareStatement(vSql);
       for (int i=0;i<listeValeur.size();i++)
       { 
         vStatement.setString(i+1,(String) listeValeur.get(i));
       }
       vResultset = vStatement.executeQuery();
       while (vResultset.next())
       {
         Construction de l''ObjetRenvoye;
       }
       return ObjetRenvoye;
    }

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 58
    Points
    58
    Par défaut
    Merci, la requete fonctionne au poil.
    Merci encore pour votre aide à tous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Recherche sur plusieurs champs
    Par gdhia dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 07/05/2012, 13h49
  2. Réponses: 8
    Dernier message: 13/04/2008, 14h44
  3. [Débutant]Recherche sur plusieurs champs
    Par Touareg dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/03/2007, 14h04
  4. Réponses: 2
    Dernier message: 30/11/2004, 09h42
  5. Recherche d'un mot avec LIKE sur plusieurs champs
    Par reynhart dans le forum Langage SQL
    Réponses: 16
    Dernier message: 26/11/2004, 17h41

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