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 :

Requete sql avec "ou inclusif"


Sujet :

JDBC Java

  1. #1
    En attente de confirmation mail
    Inscrit en
    Octobre 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 130
    Points : 33
    Points
    33
    Par défaut Requete sql avec "ou inclusif"
    Bonjour,
    Je voudrais interroger une base postgresql selon plusieurs criteres de recherche d'apres le choix de l'utilisateur càd un ou plusieurs criteres peuvent avoir la valeur null.
    Je voudrais savoir comment formuler ma requête sql avec l'opérateur OR inclusif càd lancer la recherche sur plusieurs criteres à la fois et si un critère est null je ne dois pas le prendre en considération.
    Merci.

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Et bien il faut construire ta requête en fonction des paramètres passés.
    Ci-dessous un exemple avec des EJB, mais le principe reste valable avec un PreparedStatement
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    public List<Collaborateur> findAll(String init, String identite, String firstName, String lastName, List<Integer> societeUids, List<Integer> exploitUids, List<Integer> sectionUids, String status)
    {
        LogUtil.log("finding all Collaborateur instances", Level.INFO, null);
     
        try
        {
            StringBuilder sb = new StringBuilder(80);
            sb.append("select c from Collaborateur c where 1=1");
            if ( Converters.isParameterSet(init) )
            {
                init = Converters.filterValue(init);
                if ( init.indexOf("%") != -1 ) sb.append(" and upper(c.init) like :init");
                else sb.append(" and upper(c.init) = :init");
            }
            if ( Converters.isParameterSet(identite) )
            {
                identite = Converters.filterValue(identite);
                if ( identite.indexOf("%") != -1 ) sb.append(" and upper(c.identite) like :identite");
                else sb.append(" and upper(c.identite) = :identite");
            }
            if ( Converters.isParameterSet(firstName) )
            {
                firstName = Converters.filterValue(firstName);
                if ( firstName.indexOf("%") != -1 ) sb.append(" and upper(c.prenom) like :firstName");
                else sb.append(" and upper(c.prenom) = :firstName");
            }
            if ( Converters.isParameterSet(lastName) )
            {
                lastName = Converters.filterValue(lastName);
                if ( lastName.indexOf("%") != -1 ) sb.append(" and upper(c.nom) like :lastName");
                else sb.append(" and upper(c.nom) = :lastName");
            }
            if ( Converters.isParameterSet(societeUids) )
            {
                sb.append(" and societe.uid in (:societeUids)") ;
            }
            if ( Converters.isParameterSet(exploitUids) )
            {
                sb.append(" and exploit.uid in (:exploitUids)") ;
            }
            if ( Converters.isParameterSet(sectionUids) )
            {
                sb.append(" and section.uid in (:sectionUids)") ;
            }
            if ( Converters.isParameterSet(status) )
            {
                if ( status.equalsIgnoreCase("A") )    sb.append(" and (sortie is null or sortie > :now)") ;
                if ( status.equalsIgnoreCase("I") )    sb.append(" and sortie is not null and sortie < :now") ;
            }
     
            sb.append(" order by c.nom, c.prenom, c.init");
     
            Query query = getEntityManager().createQuery(sb.toString());
     
            if ( sb.indexOf(":init") != -1 ) query.setParameter("init", init.toUpperCase());
            if ( sb.indexOf(":identite") != -1 ) query.setParameter("identite", identite.toUpperCase());
            if ( sb.indexOf(":firstName") != -1 ) query.setParameter("firstName", firstName.toUpperCase());
            if ( sb.indexOf(":lastName") != -1 ) query.setParameter("lastName", lastName.toUpperCase());
            if ( sb.indexOf(":societeUids") != -1 ) query.setParameter("societeUids", societeUids);
            if ( sb.indexOf(":exploitUids") != -1 ) query.setParameter("exploitUids", exploitUids);
            if ( sb.indexOf(":sectionUids") != -1 ) query.setParameter("sectionUids", sectionUids);
            if ( sb.indexOf(":now") != -1 ) query.setParameter("now", new Date());
     
            return query.getResultList();
        }
        catch (RuntimeException re)
        {
            LogUtil.log("find all failed", Level.SEVERE, re);
            throw re;
        }
    }
    + les 2 méthodes de ma classe utilitaires
    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
     
    ...
    /**
     * Remplacement des caractères de recherche générique
     */
    public static String filterValue(String value)
    {
        if ( value == null ) return null;
        String result = value.replace('*', '%');
        return result;
    }
     
    /**
     * Test si le paramètre est positionné
     */
    @SuppressWarnings("unchecked")
    public static boolean isParameterSet(Object parameter)
    {
        if ( parameter == null ) return false;
        if ( parameter instanceof String ) return ((String)parameter).trim().length() == 0 ? false : true;
        if ( parameter instanceof List ) return ((List)parameter).size() == 0 ? false : true;
        return true;
    }
    ...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    En attente de confirmation mail
    Inscrit en
    Octobre 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 130
    Points : 33
    Points
    33
    Par défaut
    Salut,
    Merci pour ta reponse mais je ne travailles pas avec les EJB pour l'instant, ça aurais été mieux avec un prepared statement de la classe java.sql.
    Merci.

Discussions similaires

  1. [Toutes versions] Requête SQL avec Simples et Doubles Quotes
    Par Roums dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 25/03/2010, 10h00
  2. REQUETE SQL AVEC HAVING
    Par juju_77 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 05/08/2005, 09h49
  3. Probleme de requete SQL avec un champs date
    Par ju360modena dans le forum ASP
    Réponses: 5
    Dernier message: 16/06/2005, 11h18
  4. [JDBC] retour de requete sql avec valeur NULL
    Par maxxou dans le forum JDBC
    Réponses: 3
    Dernier message: 13/09/2004, 14h40

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