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

NetBeans Java Discussion :

[Visual Web] comment extraire des données stockées dans une bdd mysql avec un champs blob


Sujet :

NetBeans Java

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 11
    Points : 10
    Points
    10
    Par défaut comment extraire des données stockées dans une bdd mysql avec un champs blob
    salut , j'aimerais bien savoir comment je peux extraire des fichiers zippés que j'ai déja mis dans ma base de données mysql qui est connectée à travers un jdbc mysql à des pages jsp.
    ces fichiers zippés je les ai mis dans un champ de type blob dans ma base alors je veux les extraire de la base à travers des hyperliens "pour chaque fichier zippé ".

    Comment je dois faire ?
    merci d'avance pour toute aidée .

  2. #2
    Expert confirmé
    Avatar de Valère
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 334
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2005
    Messages : 1 334
    Points : 4 740
    Points
    4 740
    Par défaut
    Bonjour,

    Il faut faire celà avec une servlet. Le principe, c'est que depuis ton backing bean tu récupères ta donnée binaire, tu la places dans l'objet Session, tu crées une servlet chargée de publier l'objet binaire, et tu te débrouilles pour que ton lien pointe vers la servlet.

    Voici un exemple qui affiche une image dynamique, avec un peu de modifs, ça s'applique à un lien.

    Je mets de côté la récupération des données blob depuis la DB.

    Il faut commencer par ajouter une servlet dans ton projet VWP, qui va retourner le contenu binaire: Menu Files | New File | Visual Web | Servlet (Nom ChartViewer, package com.developpez.valered.vwp par exemple). De cette manière le VWP va te configurer automatiquement le web.xml.

    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
    package com.developpez.valered.vwp;
     
    import java.awt.image.*;
    import java.io.*;
    import java.net.*;
     
    import javax.servlet.*;
    import javax.servlet.http.*;
    import org.jfree.chart.encoders.*;
     
    public class ChartViewer extends HttpServlet {
     
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            // get the chart from session
            HttpSession session = request.getSession();
            String reference = request.getParameter("ref");
            if (reference != null) {
                BufferedImage chartImage = (BufferedImage) session.getAttribute(reference);
                // set the content type so the browser can see this as a picture
                response.setContentType("image/jpeg");
     
                // send the picture
                response.getOutputStream().write(EncoderUtil.encode(chartImage, ImageFormat.JPEG, (float) 0.8));
            }
     
        }
     
        /** Handles the HTTP <code>GET</code> method.
         * @param request servlet request
         * @param response servlet response
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        }
     
        /** Handles the HTTP <code>POST</code> method.
         * @param request servlet request
         * @param response servlet response
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        }
     
    }
    Ensuite, en mode design de ta page VWP, on place une Image image1, que l'on va initialiser en mode java, par exemple dans prerender()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            String maReference = "maReferenceAMonImage";
     
            // on passe les étapes qui permettent la création d'un BufferedImage
            // qui contient notre image binaire
     
            // on récupère l'objet Session
            HttpSession session = (HttpSession) getExternalContext().getSession(true);
     
            // on ajoute notre BufferedImage dans la session
            session.setAttribute(maReference, bufferedImage);
     
            // on initialise le composant JSF image pour que son URL pointe vers la servlet
            // avec la bonne référence
            image1.setUrl("ChartViewer?ref=" + maReference);
    Val
    Pensez au bouton
    Je ne répond pas aux questions techniques par email ou MP.

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    merci mais je pense bien a mettre juste les liens de mes fichies a la basse ,
    et les utilisé pour téléchargé a partir de ces liens pour le moment .
    pour ta solution , je sais pas si ca va marcher avec mes fichiers qui sont zipper
    je veut essayer .
    merci infiniment de tt façon .

  4. #4
    Expert confirmé
    Avatar de Valère
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 334
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2005
    Messages : 1 334
    Points : 4 740
    Points
    4 740
    Par défaut
    Le principe reste le même, et ce n'est pas une particularité du VWP: pour transmettre des données binaires dans une web application, il faut utiliser une servlet. Après, que les données soient affichées sous forme d'image, ou téléchargées lorsqu'on clique sur un lien, la technique reste la même.

    Val
    Pensez au bouton
    Je ne répond pas aux questions techniques par email ou MP.

  5. #5
    Débutant
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 496
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par valered
    Bonjour,

    Il faut faire celà avec une servlet. Le principe, c'est que depuis ton backing bean tu récupères ta donnée binaire, tu la places dans l'objet Session, tu crées une servlet chargée de publier l'objet binaire, et tu te débrouilles pour que ton lien pointe vers la servlet.

    Voici un exemple qui affiche une image dynamique, avec un peu de modifs, ça s'applique à un lien.

    Je mets de côté la récupération des données blob depuis la DB.

    Il faut commencer par ajouter une servlet dans ton projet VWP, qui va retourner le contenu binaire: Menu Files | New File | Visual Web | Servlet (Nom ChartViewer, package com.developpez.valered.vwp par exemple). De cette manière le VWP va te configurer automatiquement le web.xml.

    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
    package com.developpez.valered.vwp;
     
    import java.awt.image.*;
    import java.io.*;
    import java.net.*;
     
    import javax.servlet.*;
    import javax.servlet.http.*;
    import org.jfree.chart.encoders.*;
     
    public class ChartViewer extends HttpServlet {
     
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            // get the chart from session
            HttpSession session = request.getSession();
            String reference = request.getParameter("ref");
            if (reference != null) {
                BufferedImage chartImage = (BufferedImage) session.getAttribute(reference);
                // set the content type so the browser can see this as a picture
                response.setContentType("image/jpeg");
     
                // send the picture
                response.getOutputStream().write(EncoderUtil.encode(chartImage, ImageFormat.JPEG, (float) 0.8));
            }
     
        }
     
        /** Handles the HTTP <code>GET</code> method.
         * @param request servlet request
         * @param response servlet response
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        }
     
        /** Handles the HTTP <code>POST</code> method.
         * @param request servlet request
         * @param response servlet response
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        }
     
    }
    Ensuite, en mode design de ta page VWP, on place une Image image1, que l'on va initialiser en mode java, par exemple dans prerender()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            String maReference = "maReferenceAMonImage";
     
            // on passe les étapes qui permettent la création d'un BufferedImage
            // qui contient notre image binaire
     
            // on récupère l'objet Session
            HttpSession session = (HttpSession) getExternalContext().getSession(true);
     
            // on ajoute notre BufferedImage dans la session
            session.setAttribute(maReference, bufferedImage);
     
            // on initialise le composant JSF image pour que son URL pointe vers la servlet
            // avec la bonne référence
            image1.setUrl("ChartViewer?ref=" + maReference);
    Val
    Bonjour Valère

    Je suis en train d'essayer ta servlet ci-haut et elle me donne des erreurs
    J'ai créee la Servlet avec file menu ..... (ici tous va bien) mais mon code généré est légerement différent du tiens. voici le mien :
    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
    package Diamonds;
    import java.io.*;
    import java.net.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
     
    public class ChartViewer extends HttpServlet {
     
        /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
         * @param request servlet request
         * @param response servlet response
         */
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            /* TODO output your page here
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet ChartViewer</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet ChartViewer at " + request.getContextPath () + "</h1>");
            out.println("</body>");
            out.println("</html>");
             */
            out.close();
        }
     
        // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
        /** Handles the HTTP <code>GET</code> method.
         * @param request servlet request
         * @param response servlet response
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        }
     
        /** Handles the HTTP <code>POST</code> method.
         * @param request servlet request
         * @param response servlet response
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        }
     
        /** Returns a short description of the servlet.
         */
        public String getServletInfo() {
            return "Short description";
        }
        // </editor-fold>
    }
    J'ai ensuite mis un composant image sur la page (image1) (ici tous va bien)

    J'ai mis la partie de ton code dans la méthode prerender() comme suit : et je recois les deux erreurs suivantes en rouge ()
    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
    public void prerender() {
            String maReference = "maReferenceAMonImage";
     
            // on passe les étapes qui permettent la création d'un BufferedImage
            // qui contient notre image binaire
     
            // on récupère l'objet Session
           HttpSession session = (HttpSession) getExternalContext().getSession(true);
         
            // on ajoute notre BufferedImage dans la session
          session.setAttribute(maReference, bufferedImage);
         
            // on initialise le composant JSF image pour que son URL pointe vers la servlet
            // avec la bonne référence
            image1.setUrl("ChartViewer?ref=" + maReference);
     
        }
    J'ai fait alt+shift+f pour importer les librairies manquantes, et à ce point la première ligne rouge HttpSession ..... devient correcte mais pas la deuxième. je recois une fenêtre disant "No imports found for the following types : bufferedImage"

    Faut-il rajouter manuellement autre chose ?

    Qu'est ce qu'il faut mettre pour lier la référence à mon image ? une adresse ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public void prerender() {
            String maReference = "maReferenceAMonImage";

  6. #6
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Bonjour, je recherche comment je pourrais récupérer la session (getSessionBean) à partir de la servlet, sans la poster en paramètre.

    merci

Discussions similaires

  1. Comment extraire des données image d'une table sqlserver
    Par mcadic dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/03/2008, 10h06
  2. Réponses: 3
    Dernier message: 28/05/2007, 13h11
  3. Réponses: 2
    Dernier message: 14/05/2007, 09h40
  4. Réponses: 5
    Dernier message: 15/03/2007, 10h08
  5. [MySQL] enregistrer des données CSV dans une BDD
    Par NicoO_O dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 28/11/2006, 23h10

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