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

Java Discussion :

Pattern DAO : intégrer une liste dans la requete


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 90
    Par défaut Pattern DAO : intégrer une liste dans la requete
    Bonjour,

    Je suis entrain d'utiliser le pattern DAO pour l'échange de données avec la base de données et je suis entrain d'exécuter une requête qui prend comme paramètre un int et un string. Seulement, je voudrais qu'elle prenne en paramètre une liste de int et une liste de string. je ne sais pas comment l'intégrer dans ma requête sql.
    Bien entendu, mes listes ne sont pas fixes et je peux faire appel à différentes listes pour exécuter la requête.

    Voici mon code initial qui marche super bien pour des valeurs singulières mais je voudrais que ce soit des listes pour ne pas faire des boucles for imbriqués pour prendre en compte la liste des valeurs et la liste des mots.

    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 static double loadSelectedval(Connection conn, int val, String mot) throws SQLException, NotFoundException {
     
            String sql = "SELECT A.charge FROM A "
    	  +"	WHERE A.valeur = ? AND A.mot = ?";
     
     
            PreparedStatement stmt = null;
            ResultSet result = null;
            double cumulTS = 0 ;
              try {
                       stmt = (PreparedStatement) conn.prepareStatement(sql);
                       stmt.setInt(1, val);
                       stmt.setString(2, mot);
                               result = stmt.executeQuery();
                               double temp;
                               while (result.next()) {
                                temp = result.getDouble("charge");
                                cumulTS = cumulTS + temp;
                              }
                            return cumulTS;
              } finally {
                  if (stmt != null)
                      stmt.close();
              }
        }

  2. #2
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 90
    Par défaut
    Re Bonjour,

    Est ce qu'il n'y a pas un moyen pour le faire ou quel est le problème au juste ?!

  3. #3
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 90
    Par défaut
    Je suis encore bloqué depuis 3 jours, je ne trouve pas un moyen pour le faire !! si je ne me suis pas bien expliqué, dites le moi, je me ré-expliquerai ..

  4. #4
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Tu veux faire quoi exactement ?
    Passer une liste d'arguments, du genre il faut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          Arg1 = x1 
    AND Arg2 = x2 
    AND ... 
    AND ArgN = xN
    Ou bien tu veux que la valeur fasse partie d'une liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Arg IN (x1,x2,x3,...,xN)
    ?

  5. #5
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 90
    Par défaut
    regarde le code du premier post, il y a un code simple est qui marche mais moi, je veux un code qui ressemblerait plutôt à ca :

    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
    public static double loadSelectedval(Connection conn, int val, List listemot) throws SQLException, NotFoundException {
     
            String sql = "SELECT A.charge FROM A "
    	  +"	WHERE A.valeur = ? AND A.mot IN ?";
     
     
            PreparedStatement stmt = null;
            ResultSet result = null;
            double cumulTS = 0 ;
              try {
                       stmt = (PreparedStatement) conn.prepareStatement(sql);
                       stmt.setInt(1, val);
                       stmt.setObject(2, listemot);
                               result = stmt.executeQuery();
                               double temp;
                               while (result.next()) {
                                temp = result.getDouble("charge");
                                cumulTS = cumulTS + temp;
                              }
                            return cumulTS;
              } finally {
                  if (stmt != null)
                      stmt.close();
              }
        }
    je ne veux plus donner en attribut à la méthode un seul string "mot" mais je voudrais donner une liste de string et franchement, je bloque dans l'intégration en java.
    Je sais que le code ci dessus est faux mais juste pour comprendre le principe..
    Ai-je été assez clair ?

  6. #6
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Ok, c'est donc bien le cas "IN" qui t'intéresse.

    Avec les PreparedStatement, autant que je sache il n'y a pas de méthode pour gérer le IN / List. Il faut donc que tu écrives quelque chose qui le fasse ^^

    Soit :
    1. Une méthode qui génère une String pour la partie (?, ?, ? .... ) avec autant de points d'interrogation que de membres de la liste. Rien de bien sorcier, un StringBuilder et une boucle for.

    2. Appeler cette méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String sql = "SELECT A.charge FROM A "
    	  +"	WHERE A.valeur = ? AND A.mot IN " + generateSqlPartForInList(list);
    3. Une méthode qui ensuite itère sur la liste et y colle les éléments. Là encore, rien de bien sorcier, une bête boucle for.

Discussions similaires

  1. [AC-2010] Intégrer une liste dans 2 tables
    Par ZoliveR dans le forum Modélisation
    Réponses: 6
    Dernier message: 23/02/2012, 13h46
  2. Réponses: 2
    Dernier message: 21/07/2010, 12h30
  3. Réponses: 5
    Dernier message: 09/02/2010, 15h28
  4. Réponses: 3
    Dernier message: 28/02/2009, 06h23
  5. DAO impossible d'utiliser une fonction dans un requete
    Par exter666 dans le forum VBA Access
    Réponses: 10
    Dernier message: 24/09/2005, 17h15

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