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

Servlets/JSP Java Discussion :

Servlet retourne une requete Sql


Sujet :

Servlets/JSP Java

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 114
    Par défaut Servlet retourne une requete Sql
    Bonsoir
    je dispose d'une méthode qui consulte les tables de ma base de donnée MySql:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void printTable(String name) {
            try {
                Statement sql = db.createStatement();
                ResultSet rs = sql.executeQuery("SELECT * FROM " + name);
                while (rs.next()) {
                    System.out.println(rs.getString(1) + " : " + rs.getString(2));
                }
            }
            catch(Exception e) {
                System.out.println("Erreur : " + e.getMessage());
            }
        }
    l'utilisateur choisit dans le formulaire la table à afficher, dans un cambo, :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <select name="listall" size="1">
                        <option name="produits"> Produits </option>
                        <option name="clients"> Clients </option>
                        <option name="fournisseurs"> Fournisseurs </option>
                        <option name="facture"> Facture </option>
                    </select>
    le formulaire transmet les informations demandés, et la servlet ainsi lance la recherche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String tableName = request.getParameter("listall");      db.printTable(tableName);
    Je voudrais donc retourner le resultat de l'affichage vers la page d'origine pour l'exploiter avec Ajax, mais je pense que ce n'est pas un
    response.getWriter().println(); qu'il me faut, puiseque je transmet un tableau (je suppose)

    des idées ?

  2. #2
    Membre émérite Avatar de Lorantus
    Homme Profil pro
    Consultant développeur indépendant / Java/VB/C(++)/ObjectPal
    Inscrit en
    Août 2007
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant développeur indépendant / Java/VB/C(++)/ObjectPal

    Informations forums :
    Inscription : Août 2007
    Messages : 599
    Par défaut
    La méthode effectue 2 actions :
    - l'extraction des données de la base SQL
    - l'affichage des données extraites vers la sortie systeme.

    Je ferai comme suit:
    - une méhode pour effectuer l'extraction, avec un booléen en retour pour informer de la présence lignes extraites:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void extractFromTable(String name) {
            try {
                Statement sql = db.createStatement();
                ResultSet rs = sql.executeQuery("SELECT * FROM " + name);
                return (rs.hasNext());
            }
            catch(Exception e) {
                System.out.println("Erreur : " + e.getMessage());
            }
        }
    - une méthode pour effectuer le rendu (comme tu veux faire sous Ajax, tu peux ainsi faire un retour HTML, et placer cela dans un tag avec .innHTML, ou en XML, et effectuer un post traitement avec Ajax):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     public void renderTable(ResultSet rs, Writer out) {
                        while (rs.next()) {
                              out.println(rs.getString(1) + " : " + rs.getString(2));
                          }
              }
    et pour coordonner le tout:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rs = extractFromTable(name);
    renderTable(rs,response.getOutputStream());
    On peut encore faire mieux en encapsulant tout cela dans un objet, ayant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private ResultSet rs=null;
    et les deux méthodes membres de l'objet.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    j'éviterais de passer directement dans une requete sql le nom de table récupéré depuis la page web si j'étais toi,.

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 114
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     public void renderTable(ResultSet rs, Writer out) {
                        while (rs.next()) {
                              out.println(rs.getString(1) + " : " + rs.getString(2));
                          }
              }
    le out.println() ne fait pas partie des méthode d'un objet Writer, c'est ce que Eclipse me signale, j'utilise donc un objet ServletOutputStream.
    Je combine les deux méthodes en une seule qui reçoit le nom de la table et affiche via l'objet ServletOutputStream, je modifie un peu du tout, et ça marche..

    Tchize, je n'ai pas vraiment saisie ce que tu voulais dire ?

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    non, mais elle est présente sur "PrintWriter" qui est le type retourné par "public java.io.PrintWriter getWriter()" sur httpservletresponse.

    Pour le problème des tables, tu injecte directment dans du sql quelques chose qui viens du navigateur sans le vérifier, imgine le bordel si quelqu'un choisi comme non de table
    JE te conseille fortement d'utiliser des requetes paramétrées.

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 114
    Par défaut
    hum, je comprend mieux. Je vais garder ça en tête.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/02/2012, 18h40
  2. Réponses: 2
    Dernier message: 18/08/2009, 21h14
  3. date d'une requete sql
    Par innosang dans le forum Bases de données
    Réponses: 4
    Dernier message: 28/04/2004, 09h27
  4. Mettre a jour les Parametres dans une requete SQL
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 7
    Dernier message: 31/03/2004, 13h51
  5. Une requete SQL unpeux difficile !!
    Par nil dans le forum Bases de données
    Réponses: 5
    Dernier message: 09/03/2004, 12h32

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