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 :

Problème de paramètre


Sujet :

JDBC Java

  1. #1
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut Problème de paramètre
    Bonjour

    J'ai la méthode suivante qui me permet d'afficher la liste des offres contenues dans ma base de données:

    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
     
     @Override
        public List<Offre> rechercheRapide()
    {
     Connection connection = null;
            PreparedStatement preparedStatement = null;
            ResultSet resultSet = null;
            List<Offre> offres = new ArrayList<Offre>();
     
    String requete = "select * from offre where type_offre = ? and ville = ? and region = ?" ;
    String typeOffre, ville, region;
     
            try {
                connection = daoFactory.getConnection();
                preparedStatement = initialisationRequetePreparee( connection, requete, false, typeOffre,ville,region);
                resultSet = preparedStatement.executeQuery();
                while ( resultSet.next() ) {
                    offres.add( map( resultSet ) );
                }
            } catch ( SQLException e ) {
                System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                System.out.println(requeteParam);
     
                throw new DAOException( e );
            } finally {
                fermeturesSilencieuses( resultSet, preparedStatement, connection );
            }
     
            return offres; 
    }
    Ce code marche très bien.

    Mais j'aimerais remplacer les 3 string typeOffre, ville, region par une seule String comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    String test = "typeOffre,ville,region";
    try {
                connection = daoFactory.getConnection();
                preparedStatement = initialisationRequetePreparee( connection, requete, false, test);
                resultSet = preparedStatement.executeQuery();
                while ( resultSet.next() ) {
                    offres.add( map( resultSet ) );
                }
    Mais lorsque j'exécute j'ai le message d'erreur :

    Grave: "Servlet.service()" pour la servlet RechercheRapide a généré une exception
    dao.DAOException: java.sql.SQLException: No value specified for parameter 2
    at dao.OffreDaoImpl.rechercheRapide(OffreDaoImpl.java:179)
    at servlets.RechercheRapide.doPost(RechercheRapide.java:62)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at filters.PrechargementFilter.doFilter(PrechargementFilter.java:66)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
    Caused by: java.sql.SQLException: No value specified for parameter 2
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
    at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2176)
    at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2100)
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1826)
    at com.jolbox.bonecp.PreparedStatementHandle.executeQuery(PreparedStatementHandle.java:172)
    at dao.OffreDaoImpl.rechercheRapide(OffreDaoImpl.java:171)
    ... 28 more
    Comment faire?

    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Pourquoi veux-tu créer une seule chaîne de caractère correspondant à la concaténation de tes paramètres ?
    1. Il te faudra redécouper cette chaîne pour setter les paramètres au PreparedStatement
    2. Tu perds de l'information, si jamais un de tes paramètres contient une ",". Tu peux plus redécouper correctement.


    L'erreur que tu obtiens est logique si tu ne spécifies plus qu'un seul paramètre, les deux ne sont pas spécifiés et la requête est donc incomplète.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  3. #3
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Salut,

    la réponse se trouve dans la méthode initialisationRequetePreparee() que tu appelles dans ton premier exemple avec 6 paramètres (3 obligatoires + les 3 paramètres de ta requête), alors que tu n'a plus que 3 + 1 dans ton deuxième exemple.

    Si ce code compile c'est que la méthode initialisationRequetePreparee() doit d'écrire avec tes 3 paramètre obligatoire + une ellipse sur le dernier paramètre.
    Ce qui doit donner un truc dans le style initialisationRequetePreparee( Connection cnx, String requete, boolean b, String...params ).

    Ce dernier paramètre, comme je l'ai dit s'appelle une ellipse, cela permet de pouvoir passer un nombre indéfini de paramètre avec un type donné (ici une String). C'est que ce que tu fais dans ton premier exemple en passant tes 3 paramètres typeOffre, ville et region.

    Dans le corps de cette méthode, tu va récupérer ces paramètres sous forme d'un tableau dans le but de les binder avec les paramètres de ta requête SQL.
    Ça doit ressembler à un truc dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    initialisationRequetePreparee( Connection cnx, String requete, boolean b, String...params)
    {
      // Je ne sais pas à quoi correspond ton boolean.
      PreparedStatement pStm = cnx.prepareStatement( requete );
     
      for(int i=0;i<params.length;i++)
        pStm.setString( i, params[i] );
     
      return pStm;
    }
    Or en mettant tous tes paramètres dans la même String, le comportement de cette méthode n'est plus adapté. En effet elle ne va trouver d'un seul paramètre, et les deux autres ne seront jamais bindé avec ta requête -> d'où ton erreur.

    Donc soit tu fais avec et tu gardes tes 3 paramètres, soit tu modifies le comportement de la méthode. Ce qui est à mon avis une mauvaise idée car si elle est là, c'est surement pour être utilisé ailleurs. Et en la modifiant, tu prends le risque de casser le reste du code

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String requete = "select * from offre where type_offre||','||ville||','|| region = ?" ;
    Mais franchement c'est ridicule, tu va perdre les avantages des indexs, tu a avoir des effets de bord si tu as des , dans tes paramètres et les perfs seront catastrophiques.

  5. #5
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    Bon en réalité je n'ai pas que 3 paramètres. En effet, ces derniers varient en fonction du choix de l'utilisateur. Je vous donne tout le code:

    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
     @Override
        public List<Offre> rechercheRapide(String CHAMP_TYPE_OFFRE, String CHAMP_VILLE, String CHAMP_REGION, String CHAMP_SECTEUR,String typeOffre, String ville, String region, String secteur) throws DAOException 
        {
         Map myMap=new java.util.LinkedHashMap ();
             Map param=new java.util.LinkedHashMap ();
     
             if(!typeOffre.equals("selects"))
          {
           myMap.put(CHAMP_TYPE_OFFRE, typeOffre);
           param.put("typeOffre", "typeOffre");
          }
     
            if(!ville.equals("selects"))
          {
           myMap.put(CHAMP_VILLE, ville);
           param.put("ville", "ville");
          }  
     
            if(!region.equals("selects"))
          {
           myMap.put(CHAMP_REGION, region);
           param.put("region", "region");
          }
     
              if(!secteur.equals("selects"))
          {
           myMap.put(CHAMP_SECTEUR, secteur); 
           param.put("secteur", "secteur");
          }
               String suite = "", list="";
            if(typeOffre.equals("selects") && ville.equals("selects") && region.equals("selects") && secteur.equals("selects"))
            {
            suite = "type_offre = ? and ville = ? and region = ? and secteur = ? and";
            list = "typeOffre,ville,region,secteur,";
     
            }
            else
            {
             suite = "";
             list = "";
            }
     
        // Afficher le contenu du MAP
        Set listKeys=myMap.keySet();  // Obtenir la liste des clés
        Iterator iterateur=listKeys.iterator();
        // Parcourir les clés et afficher les entrées de chaque clé;
        String s="select * from Offre where "+suite;
        while(iterateur.hasNext())
        {
            Object key= iterateur.next();
            s=s+(String)key+" = ? and ";
        }
            String requete = s.substring(0, s.lastIndexOf("and"));
     
     
            //Début de la 2e LinkedHashMap ********************************************************************
     
            // Afficher le contenu du MAP
        Set listParam=param.keySet();  // Obtenir la liste des clés
        Iterator iterateurParam=listParam.iterator();
        // Parcourir les clés et afficher les entrées de chaque clé;
     
        while(iterateurParam.hasNext())
        {
            Object key2= iterateurParam.next();
            list=list+(String)key2+",";
        }
     
            String requeteParam = list.substring(0, list.lastIndexOf(","));
     
            //Fin de la 2e LinkedHashMap  ***********************************************************************
     
            Connection connection = null;
            PreparedStatement preparedStatement = null;
            ResultSet resultSet = null;
            List<Offre> offres = new ArrayList<Offre>();
     
            try {
                connection = daoFactory.getConnection();
                preparedStatement = initialisationRequetePreparee( connection, requete, false, requeteParam );
     
                resultSet = preparedStatement.executeQuery();
                while ( resultSet.next() ) {
                    offres.add( map( resultSet ) );
                }
            } catch ( SQLException e ) {
     
                System.out.println(requeteParam);
     
                throw new DAOException( e );
            } finally {
                fermeturesSilencieuses( resultSet, preparedStatement, connection );
            }
     
            return offres;   
     
        }
    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
     
    public class RechercheRapide extends HttpServlet {
     
    public void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
     
    String typeOffre = getValeurChamp( request, CHAMP_TYPE_OFFRE );
    String v = getValeurChamp( request, CHAMP_VILLE );
    String region = getValeurChamp( request, CHAMP_REGION );
    String secteur = getValeurChamp( request, CHAMP_SECTEUR);
     
    List<Offre> listeOffres = offreDao.rechercheRapide(CHAMP_TYPE_OFFRE, CHAMP_VILLE, CHAMP_REGION, CHAMP_SECTEUR, typeOffre, ville, region, secteur);
             Map<Long, Offre> mapListeOffres = new HashMap<Long, Offre>();
                for ( Offre offre : listeOffres )
                {
                    mapListeOffres.put( offre.getId(), offre );
                    System.out.println("La liste est:"+mapListeOffres);
                }
    }
     
    }
    Voici ma jsp:

    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
    <form action="<c:url value="/rechercheRapide"/>" id="search-form" method="post"><fieldset>
                                            	<div class="styled-select">
                                                   <select name="type_offre" >
                                                      <option value="selects">Sélectionnez le type d'offre</option>
                                                      <option value="emploi">Emploi</option>
                                                      <option value="stage">Stage</option>                                                  
                                                   </select>
                                                </div>
                                                    <div class="styled-select">
                                                   <select name="ville" id="region" onchange="changerVille()">
                                                      <option value="selects">Sélectionnez une ville</option>
                                                      <option value="régionA">région A</option>
                                                      <option value="régionB">région B</option>
                                                      <option value="régionC">région C</option>
                                                   </select>
                                                </div>
                                                <div class="styled-select">
                                                   <select name="region" id="ville">
                                                      <option value="selects">Sélectionnez une région</option>
                                                      <option  value="villeA">ville A</option>
                                                      <option  value="villeB">ville B</option>
                                                      <option  value="villeC">ville C</option>
                                                   </select>
                                                </div>
                                                <div class="styled-select">
                                                   <select name="secteur">
                                                      <option value="selects">Sélectionnez un secteur</option>
                                                      <option value="Comptabilité">Comptabilité</option>
                                                      <option value="Finance">Finance</option>
                                                      <option value="Informatique">Informatique</option>
                                                   </select>
                                                </div>
                                                <a href="#" class="link-2" onclick="document.getElementById('search-form').submit()"><em><b>Rechercher</b></em></a><a href="#" class="fright txt3"><strong>Recherche avancée</strong></a>
                                            </fieldset></form>
    Donc il n y a aucun problème avec les virgules car je les supprime.

    Maintenant vous comprenez pourquoi je tiens à découper la chaine "requeteParam".

  6. #6
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Citation Envoyé par momjunior Voir le message
    Maintenant vous comprenez pourquoi je tiens à découper la chaine "requeteParam".
    Pas vraiment non..

    La bonne solution serait d'utiliser un tableau pour stocker tes paramètres. De plus, tu ne montres pas le corps de la méthode initialisationRequetePreparee() qui est vraisemblablement la source de ton problème.

  7. #7
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Citation Envoyé par momjunior Voir le message
    Maintenant vous comprenez pourquoi je tiens à découper la chaine "requeteParam".
    Non, toujours pas désolé.

    • Si tu veux une liste, utilise une List
    • Si tu veux construire des chaînes, penses à utiliser StringBuilder
    • Si tu veux itérer, penses à utiliser "for each"
    • Pourquoi utiliser une map pour "Param" s'il s'agit simplement d'un ensemble ? Utilise un Set
    • Est-ce normal que si chacun est différent de "selects" tu les ajoutes, et s'ils sont tous égaux tu les ajoutes tous ?
    • Est-ce normal que ce soit le DAO qui fasse ce contrôle ?
    • Est-ce normal que ce soit l'appelant du DAO qui indique le nom des champs ?
    • Est-ce normal que requeteParam ne contiennent que des noms de champs ?


    Normalement, dans une méthode de DAO, tous les paramètres sont optionnels (par défaut, null ou utiliser une référence particulière). Sinon on peut également passer par un builder :
    Code Java : 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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    public class DAOException extends RuntimeException {
      public DAOException(Throwable t) {}
    }
    public interface ResultSetMapper<E> {
      E map(ResultSet rs);
    }
    public class Jdbc {
      protected DataSource dataSource;
      public <E> List<E> query(String sql, List<String> params, ResultSetMapper<E> mapper) {
        List<E> list = new ArrayList<>();
        try (Connection conn = dataSource.getConnection()) {
          try (PreparedStatement stmt = conn.prepareStatement(sql)) {
            int idx = 1;
            for (String param : params) {
              if (param != null) {
                stmt.setString(idx++, param);
              } else {  // Pour les drivers casse-pieds
                stmt.setNull(idx++, Types.VARCHAR);
              }
            }
            try (ResultSet rs = stmt.executeQuery()) {
              while (rs.next()) {
                E elt = mapper.map(rs);
                list.add(elt);
              }
            }
          }
        } catch (SQLException e) {
          throw new DAOException(e);
        }
        return list;
      }
    }
    public class Dao {
      public static final String DEFAULT = new String(Dao.class.getName() + ".DEFAULT");
      protected ResultSetMapper<Offre> mapper;
      protected Jdbc                   jdbc;
     
      protected List<Offre> recherche(Map<String,String> params) {
        StringBuilder sql = new StringBuilder().append("select * from Offre where 1=1");
        for (String fields : params.keySet()) {
          sql.append(" and ").append(fields).append("=?");
        }
        return jdbc.query(sql.toString(), new ArrayList<>(params.values()), mapper);
      }
     
      public List<Offre> rechercheNull(String typeOffre, String ville, String region, String secteur) {
        Map<String,String> params = new LinkedHashMap<>();
     
        if (typeOffre != null) {
          params.put("typeOffre", typeOffre);
        }
        if (ville != null) {
          params.put("ville", ville);
        }
        if (region != null) {
          params.put("region", region);
        }
        if (secteur != null) {
          params.put("secteur", secteur);
        }
        return recherche(params);
      }
     
      public List<Offre> rechercheDefault(String typeOffre, String ville, String region, String secteur) {
        Map<String,String> params = new LinkedHashMap<>();
     
        if (typeOffre != DEFAULT) {
          params.put("typeOffre", typeOffre);
        }
        if (ville != DEFAULT) {
          params.put("ville", ville);
        }
        if (region != DEFAULT) {
          params.put("region", region);
        }
        if (secteur != DEFAULT) {
          params.put("secteur", secteur);
        }
        return recherche(params);
      }
     
      public class RechercheBuilder {
        protected Map<String,String> params = new LinkedHashMap<>();
        public RechercheBuilder typeOffre(String typeOffre) {
          params.put("typeOffre", typeOffre);
          return this;
        }
        public RechercheBuilder ville(String ville) {
          params.put("ville", ville);
          return this;
        }
        public RechercheBuilder region(String region) {
          params.put("region", region);
          return this;
        }
        public RechercheBuilder secteur(String secteur) {
          params.put("secteur", secteur);
          return this;
        }
        public List<Offre> recherche() {
          return Dao.this.recherche(params);
        }
      }
      public RechercheBuilder rechercheBuilder() {
        return new RechercheBuilder();
      }
    }
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

Discussions similaires

  1. Problème requête paramétrée mysqli
    Par Ethylene dans le forum Installation
    Réponses: 5
    Dernier message: 15/05/2006, 16h57
  2. Problème de paramètres dans mon code javascript
    Par cocacollection dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 15/03/2006, 10h53
  3. [POO] Problème de paramètre passé par référence
    Par dug dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/08/2005, 20h29
  4. [JSP] Problème passage paramètre
    Par besco dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 13/09/2004, 10h15
  5. [SWT] Problème de paramètre GridData
    Par yolepro dans le forum SWT/JFace
    Réponses: 4
    Dernier message: 06/12/2002, 10h37

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