Fórum Recuperar imagem (blob) do Banco MySQL + JSF #387007

23/09/2010

0

Eu tenho uma tabela chamada produtos... ( ID, PRODUTO, IMAGEM ) Consegui fazer o input das informações e da imagem, porem estou tendo dificuldade de recuperar a imagem do banco conforme o Id do produto! Como posso resolver esse problema sem utilizar Servlets?!
Diego Alves

Diego Alves

Responder

Posts

24/09/2010

Davi Costa

Explica melhor a tua dificuldade,
de ante mão pode colocar a implementação na tua classe
controller. Ou criar uma classe Utilitária para no teu
managed bean tu só chamar esse método.
Espero ter ajudado
Att Davi
Responder

Gostei + 0

24/09/2010

Diego Alves

Segue o que estou tentando fazer...   #### PRODUCT.JSP ####  
            <f:view>
                <h:outputText value="The Products" /> <h1/>
                <h:dataTable border="1" var="item" value="#{ProductFace.products}" styleClass="centralizar" >
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="ID DO PRODUTO"/>
                        </f:facet>
                        <h:outputText value="#{item.id_Product}"/>
                    </h:column>
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="NOME DO PRODUTO"/>
                        </f:facet>
                        <h:outputText value="#{item.nameProduct}"/>
                    </h:column>
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="IMAGEM"/>
                        </f:facet>
                        <h:graphicImage value="#{item.imagem2}" style="width: 65px; height: 55px;"/>
                    </h:column>
                </h:dataTable>
            </f:view>
  #### ENTIDADE PRODUCT ####
public class Product implements java.io.Serializable {
    private Integer id_Product;
    private String NameProduct;
    private File imagem; // Input da Imagem no Banco
    private BufferedImage imagem2; // Recupera Imagem do Banco

    public Product() {
    }
    public String getNameProduct() {
        return NameProduct;
    }
    public void setNameProduct(String NameProduct) {
        this.NameProduct = NameProduct;
    }
    public Integer getId_Product() {
        return id_Product;
    }
    public void setId_Product(Integer id_Product) {
        this.id_Product = id_Product;
    }
    public File getImagem() {
        return imagem;
    }
    public void setImagem(File imagem) {
        this.imagem = imagem;
    }
    public BufferedImage getImagem2() {
        return imagem2;
    }
    public void setImagem2(BufferedImage imagem2) {
        this.imagem2 = imagem2;
    }
}
    #### DAO do Produto ####
import br.com.classes.Connector;
import br.com.classes.Product;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import java.io.*;
public class ProductDAO extends Connector {
    
   
    public ProductDAO() {
        super();
    }
 
// Aqui está add Imagem
    public boolean add(Product prod) throws ClassNotFoundException, SQLException, FileNotFoundException, IOException {
        FileInputStream fis = null;
        fis = new FileInputStream(prod.getImagem());
        PreparedStatement ps = (PreparedStatement) getPreparedStatement("INSERT INTO DBAPRENDIZ.PRODUCT (NameProduct, Imagem) values ( ?, ?)");
        ps.setString(1, prod.getNameProduct());
        ps.setBinaryStream(2, fis, (int) prod.getImagem().length());
        int toReturn = ps.executeUpdate();
        ps.close();
        return toReturn > 0;
    }
 
 
 
    public List<Product> getAllProducts() throws ClassNotFoundException, SQLException, IOException {
        List<Product> toReturn = new LinkedList<Product>();
        PreparedStatement ps = (PreparedStatement) getPreparedStatement("SELECT * FROM DBAPRENDIZ.PRODUCT ");
        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            Product prod = new Product();
            popularProd(prod, rs);
            toReturn.add(prod);
        }
        rs.close();
        closeAll();
        return toReturn;
    }
 
    public void popularProd(Product prod, ResultSet rs) throws SQLException, IOException {
        prod.setId_Product(rs.getInt("id_Product"));
        prod.setNameProduct(rs.getString("NameProduct"));
        /// Como Recuperar a Imagem da Base de Dados aqui 
}
}
  Dificuldade está sendo na hora de recuperar a imagem da base! Como posso fazer?! vlw
Responder

Gostei + 0

24/09/2010

Davi Costa

Seguinte troca o file por :
private byte[] imagem;

Creio eu que não vá mais precisar de :

private BufferedImage imagem2; // Recupera Imagem do Banco

Testa se continua salvando direitim.
E depois vc vai pegar esse array de bytes do banco e disserializar(gravar) em uma pasta temporária
no servidor, por isso é p outros motivos de banco essa não é melhor estratégia.
e na jsp
coloca:
<h:graphicImage value="/caminho onde a imagem é salva" style="width: 65px; height: 55px;"/>


Melhor seria vc salvar só a String com o caminho onde grava esse arquivo e na jsp
mantém que nem está acima. Vai ser melhor p banco, melhor para a aplicação.
Vai ser até mais fácil de codificar.
Att Davi

Responder

Gostei + 0

27/09/2010

Dyego Carmo

Eu não costumo fazer assim , no caso de imagens seria melhor voce criar uma servlet para recuperar esta imagem do banco... ai na tela voce colocaria o endereco da servlet...

Costuma funcionar melhor...

ValeuZ

Responder

Gostei + 0

28/09/2010

Diego Alves

Entendi... vamos lá! Fiz um Servlet pra recuperar do banco de dados!   Fiz a seguinte modificação... no código!  
                       <h:column rendered="false">
                            <f:facet name="header">
                                <h:outputText value="ID"/>
                            </f:facet>
                            <h:outputText id="id_Product" value="#{item.id_Product}"/>
                        </h:column>
 
                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="IMAGEM"/>
                            </f:facet>
                            <h:graphicImage value="DisplayImage" style="width: 65px; height: 55px;"/>
                        </h:column>
  Dyego como posso pegar o Id do produto e pasasr para o ServLet?!?!
Responder

Gostei + 0

04/10/2010

Dyego Carmo

request.getParameter("id")
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar