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

Hibernate Java Discussion :

Utilisation des "1=0" dans les requêtes


Sujet :

Hibernate Java

  1. #1
    Membre régulier Avatar de Bigoodheart
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 154
    Points : 71
    Points
    71
    Par défaut Utilisation des "1=0" dans les requêtes
    Bonjour,


    Je voudrai savoir ce que signifie 0=1 et 1=1 dans une requete hibernate !

    en fait j'utilise des conditions dans ma requête alors si la check box de country n'est pas coché ,je l'affiche pas dans le resultat et pas besoin de faire un order by dessus mon probleme c'est que si je coche pas lastname et que je coche country ou location je dois utiliser le "0=1" ou "1=1" pour resoudre le probleme des virgules "," aprés le country et location ,et j'ai pas su le faire !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hql.append(" order by " + (query.isBoxcountry() || qsearch? FIELD_COUNTRY + ","  : "  ") + (query.isBoxlocation() || qsearch? FIELD_LOCATION + ", "  : " ")+(query.isBoxmmdcontact2() || qsearch? FIELD_LASTNAME : ""));
    Quelqu'un pour m'aider SVP ?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Points : 807
    Points
    807
    Par défaut
    Bonjour,

    Le problème vient du fait que vous mettez toujours une virgule après le pays ou la location si ils sont renseignés, sans regarder si il y a effectivement besoin de cette virgule.

    Par exemple, dans le cas où seul le pays est coché, vous avez la fin de votre requête de la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY FIELD_COUNTRY ,
    Le fait d'avoir le nom coché, agit en tant que chien de garde. C'est à dire qu'il n'y a que lui qui permette de terminer correctement la requête.
    Un tout petit problème d'algo en somme. Un peu de courage, c'est pas si compliqué de faire quelque chose qui prendra tout ceci en compte.

    Pour le 1=1, c'est exactement pareil. Prenons le cas d'une requete écrite automatiquement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sb.append("select v from Tool v where 1=1 ");
     
    		if(estRenseigne(criteres.getToolId())) {
    			sb.append("and lower(v.toolId) like lower(:toolId) ");
    			params.put("toolId", "%" + criteres.getToolId() + "%");
    		}
    [et encore des if de la même forme]
    Dans le cas où rien n'est renseigné, j'ai une requête correcte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sb.append("select v from Tool v where 1=1 ");
    Si j'enlève le 1=1, il faut aussi que je supprime le where, sinon ma requête ne veut rien dire et ne peut être interpréter. Tout comme votre requête qui finit une virgule alors qu'il ne devrait rien y avoir.

  3. #3
    Membre régulier Avatar de Bigoodheart
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 154
    Points : 71
    Points
    71
    Par défaut
    Merci de votre reponse !

    Je pensais avoir compris votre explication j'ai essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hql.append(" order by " + (query.isBoxcountry() || qsearch? FIELD_COUNTRY + ",1=1 "  : "") + (query.isBoxlocation() || qsearch? FIELD_LOCATION + ",1=1"  : "")+(query.isBoxmmdcontact2() || qsearch? FIELD_LASTNAME : ""));
    et il me génére l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unexpected token: loc near line 1

  4. #4
    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
    En l'occurrence, le plus simple est de toujours ajouter le critère de tri suivi d'une virgule et de supprimer le dernier caractère, un peu 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
     
    String sql = "select .... from .... where ...");
     
    String orderClause = " ";
     
    if (chkbox1)
    {
       orderClause += "maColonne1,";
    }
     
    if (chkbox2)
    {
       orderClause += "maColonne2,";
    }
     
    if (orderClause.trim().length() > 0)
    {
       sql += orderClause.substring(0, orderClause.length() -1);
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Quote et double quote dans les requêtes paramétrées
    Par michel.souris dans le forum WinDev
    Réponses: 5
    Dernier message: 07/06/2013, 10h27
  2. Utilisation des index dans les requêtes
    Par john_wili dans le forum SQL
    Réponses: 2
    Dernier message: 02/12/2008, 15h26
  3. [MySQL] Utilisation du caractère "`" dans les requêtes
    Par PeZ dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 07/03/2006, 16h01

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