GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Persistir foto para banco de dados


#1

Pessoal, boa tarde.

Uma simples duvida que tenho é sobre a persistência de uma imagem (foto) para o banco de dados utilizando o padrão DAO.

Tava fazendo a classe JavaBeans [Livro], e fui pego nessa questão de qual tipo de atributo declarar para manipular uma imagem. Sei que no banco de dados é utilizado o campo blob.

Reforçando, a duvida é sobre qual atributo declarar na classe Beans para manipular uma imagem utilizando DAO.

Desde já, grato.


#2

eu uso byte[]


#3

Valeu pela dica cara.

Eu tava pesquisando sobre, porém nao encontrei nenhum exemplo utilizando DAO com JavaBeans. Outros exemplos todos tinham uma variavel do tipo byte[].

Abraço.


#4

Apenas uma sugestão!!!

Não seria melhor salvar a figura no disco, e no banco, apenas o path para a mesma ?


#5

A imagem depositada no banco evitaria erro caso o arquivo físico fosse deletado.
Aconselho byte[].


#6

Cara creio que em termos de performance ate seria sim. Mas voltando ao foco, atualmente estou interessado em aprender as formas de se persistir imagens no banco. Depois de solidado tal conceito, ai sim, utilizaria este passo.


#7

Entendi. Nesse ponto a performance é trocada pela seguranca..hehe

Estou usando byte[]. Vou fazer os DAO's para aprender como persistir imagens. Se possível queria ate postar aqui para os amigos darem dicas e opinioes sobre.

Desde já grato!


#8

:DMal comentei os ultimos post's agradecendo as dicas e ja to com outras duvidas...hehe

Apenas para abstrair minha duvida, fiz as principais operações de manipulação utlizando DAO (Entidade Livro utilizando imagens)

minha dúvida éh: como listar com JSTL e EL a imagem do banco de dados. Implementei tanto o metodo lista quanto o metodo adiciona(DAO).

Consegui inserir a imagem no banco de dados Mysql.

Agora estou em duvidas em como pegar a imagem listada de um ArrayList, através de JSTL e EL.

Segue abaixo o código do modelo que implementei apenas para solucionar tal falta de conhecimento[Se estiver errado ou faltando algo, principalmente na listagem, agradedço as ajudas e dicas]. Bom tai o código:

package Model;
public class Livro {
    private int id;
    private String titulo;
    private byte[] imagem;
    public Livro(){}
    public Livro(int id, String titulo, byte[] imagem) {
        this.id = id;
        this.titulo = titulo;
        this.imagem = imagem;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public byte[] getImagem() {
        return imagem;
    }
    public void setImagem(byte[] imagem) {
        this.imagem = imagem;
    }
    public String getTitulo() {
        return titulo;
    }
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }
}

package Model;
import com.mysql.jdbc.Blob;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class LivroDAO {
    private Connection con;
    private PreparedStatement stmt;
    private ResultSet rs;
    private FileInputStream fis;
    private String adiciona = "insert into livro (liv_titulo, liv_imagem) values (?, ?)";
    private String lista = "select * from livro order by liv_titulo";
    public void adiciona(Livro liv, File img) throws SQLException, FileNotFoundException
    {
        try
        {
            this.con = new ConexaoMysql().getConexao();
            this.stmt = con.prepareStatement(adiciona);
            this.stmt.setString(1, liv.getTitulo());
            this.fis = new FileInputStream(img);
            this.stmt.setBinaryStream(2, fis, img.length());
            this.stmt.execute();
        }
        catch(SQLException e)
        {
            System.out.println("Falha na Inserção do Livro: " + e.getMessage());
        }
        catch(FileNotFoundException e)
        {
            System.out.println("Imagem não encontrada: " + e.getMessage());
        }
        finally
        {
            this.stmt.close();
            this.con.close();
        }
    }
    public List<Livro> lista() throws SQLException{
        try
        {
            this.con = new ConexaoMysql().getConexao();
            this.stmt = con.prepareStatement(lista);
            this.rs = stmt.executeQuery();
            ArrayList<Livro> livros = new ArrayList<Livro>();
            while(rs.next())
            {
                Livro liv = new Livro();
                liv.setId(rs.getInt(1));
                liv.setTitulo(rs.getString(2));
                Blob imagem = (Blob) rs.getBlob(3);
                byte[] imgData = imagem.getBytes(1, (int)imagem.length());
                liv.setImagem(imgData);
                livros.add(liv);
            }
            return livros;
        }
        catch(SQLException e)
        {
            System.out.println("Falha na listagem dos livros: " + e.getMessage());
            return null;
        }
        finally
        {
            this.rs.close();
            this.stmt.close();
            this.con.close();
        }
    }
}

Até oq fiz ai, a duvida é na hora de listar! Como listo uma imagem voltada do banco com JSTL e EL? Outra duvida era também na questao de : Falta algo no metodo lista()?
Gente espero nao atrapalhar nessas tantas duvidas, vcs ajudam com uma questão e a solucção me faz gerar outra duvida...hehehehe

Bom..é isso..desde já GRATOO...


#9

para persistir a imagem vc pega ela e converte em byte[] , depois é só inserir no banco de dados


#10

Na parte de inserir ta td OK.

Valeu!!


#11