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 :

Passer un ResultSet en paramètre ? Rediriger vers une Jsp ou une servlet ?


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 199
    Points : 58
    Points
    58
    Par défaut Passer un ResultSet en paramètre ? Rediriger vers une Jsp ou une servlet ?
    Bonjour,

    J'ai une base de données de client, sous SQL Server 05. J'y accède sans soucis via le code Java.
    Sur un module de mon projet, il est possible pour l'utilisateur de rechercher un client de la BD, selon plusieurs critères.

    L'utilisateur remplit un formulaire (rechercheClient.jsp). Lors de la validation, il est renvoyé vers une servlet (RechercheClient.java). Cette servlet trouve les clients, et affiche une page avec des out.println.
    Cela n'est pas super esthétique, je trouve :
    Voici un bout du code :

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    affichage += "<html>";
                    affichage += "    <head>";
                    affichage += "        <meta http-equiv='Content-Type' content='text/html; charset=ISO-8859-1'>";
                    affichage += "        <link href='sos.css' rel='stylesheet' type='text/css'>";
                    affichage += "    </head>";
                    affichage += "    <body>";
     
    //etc...
     
    out.println(affichage)

    Est-ce raisonnable d'afficher une page uniquement à l'aide de out.println ?
    Ou bien vaut-il mieux que la servlet redirige encore vers une JSP, qui récupère le ResultSet et affiche le tout ?

    Merci de vos conseils.

  2. #2
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 199
    Points : 58
    Points
    58
    Par défaut
    Bonjour,

    Je fais une page de recherche de client dans une base SQL Server. L'utilisateur remplit un formulaire de recherche, et en validant il doit avoir la page de résultat qui s'affiche.

    Dans ma page rechercheClient.Jsp, je récupère les paramètres entrés dans le formulaire.
    Je redirige ensuite vers la servlet RechercheClient.java.
    Celle-ci se connecte à la base, recherche les clients, range le résultat dans un ResultSet, et je fais un :

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ResultSet res = connexion.rechercheClient(numRecherche, nomRecherche);
    session.setAttribute("resultatClient", res);

    Ensuite, je forward vers resultatClient.jsp. Cette JSP récupère le ResultSet et affiche les champs :

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ResultSet res = (ResultSet)session.getAttribute("resultatClient");
        while(res.next()) {
            out.println("Resultset res = " + res.getInt(1) + "<br />");
            i++;
        }

    Ai-je bien fait, où y a-t-il un moyen plus propre ?
    Merci.

  3. #3
    Membre confirmé Avatar de supermanu
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 330
    Points : 452
    Points
    452
    Par défaut
    Tout d'abord il est en effet bien mieux d'utiliser une jsp plutôt que de faire des out.println

    Pour ce qui est de passer directement le resultset à la jsp, là par contre ce n'est pas conseillé. En effet si un jour tu décides de changer la manière dont tu récupère tes données (utilisation de procédures stockées, utilisation d'un framework de mapping...) tu devras refaire toutes tes jsp
    Car tu auras un couplage fort entre ta couche de présentation et ta couche de données.

    Donc pour améliorer un peu cette situation, tu peux créer un bean tout simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class ResultatClient {
     private int id;
     private String nom;
     
     public int getId() {...}
     public void setId(int _id) {...}
     ...
    }
    Dans ta servlet tu rempli un bean ResultatClient à partir du resultset. Et c'est ce bean que tu envoie à la vue.

    Ce n'est pas la perfection mais c'est déjà mieux
    Pensez au tag
    Mon blog Tutoriels et Astuces en Java : http://emmanuelpierre.free.fr/blog/index.php?

  4. #4
    Membre confirmé Avatar de supermanu
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 330
    Points : 452
    Points
    452
    Par défaut
    Et d'ailleurs, si c'est possible, tu peux faire en sorte que ta méthode connexion.rechercheClient renvoie un bean ResultatClient, comme ça la transformation du resultset en ResultatClient se fait dans un seul endroit...

    Enfin, il vaudrait mieux utiliser request.setAttribute(...) plutôt que session.setAttribute(..). Le résultat de ta recherche est quelque chose de temporaire, que tu veux juste afficher dans la prochaine jsp. Pas besoins de rendre ce résultat disponible dans toute l'application.
    Pensez au tag
    Mon blog Tutoriels et Astuces en Java : http://emmanuelpierre.free.fr/blog/index.php?

  5. #5
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 199
    Points : 58
    Points
    58
    Par défaut
    Merci pour la suggestion.
    Donc le bean ResultatClient devrait contenir un attribut de type ResultSet ?

    Et aussi, un dernier petit truc qui m'embête : comment fermer la connexion ? Car j'ouvre une connexion dans la servlet. Ensuite après la redirection vers la JSP, la connexion doit rester ouverte (pour res.next()).

    A moins que le bean soit en fait une arrayList ?
    Encore merci.

  6. #6
    Membre confirmé Avatar de supermanu
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    330
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 330
    Points : 452
    Points
    452
    Par défaut
    Tu peux montrer le code avant connexion.rechercheClient (pour voir de quel type est l'attribut connexion).

    Non, il n'y a pas de type resultSet dans le bean.

    L'idée c'est de transformer le resultset que tu obtiens en un simple bean java.

    Si fonctionnellement ta méthode renvoi plusieurs clients, alors tu peux créer une ArrayList dans laquelle tu va mettre tes objets ResultatClient.
    Essai de trouver comment parcourir un resultset

    Une fois que tu as le resultset, tu peux fermer la connexion. L'objet contient tout ce dont tu as besoins, il n'est plus nécessaire d'accéder à la base.
    Pensez au tag
    Mon blog Tutoriels et Astuces en Java : http://emmanuelpierre.free.fr/blog/index.php?

  7. #7
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 199
    Points : 58
    Points
    58
    Par défaut
    Ah merci, je vois.
    Pour le parcours de la resultset, c'est pas compliqué. Pour ranger les résultats non plus, c'est pas compliqué.
    Au pire j'ai un bean Client déjà défini, je peux faire alors une arrayList d'objets Client.

    C'est vrai que c'est pratique car je peux fermer la connexion juste après le remplissage de l'arrayList.

    Pour connexion, il est de type SqlConnection, une classe que j'ai écrite. Cette classe contient l'url de la BD SQL, le login et le password, ainsi qu'un statement et un preparedStatement. C'est cette classe qui fait toutes les requêtes sur la base SQL Server.

    Merci beaucoup, j'ai maintenant une idée de comment améliorer mon code.
    A+.

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

Discussions similaires

  1. Appeler une méthode d'une applet dans une jsp
    Par salmoucha10 dans le forum Applets
    Réponses: 1
    Dernier message: 11/01/2011, 19h25
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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