Imagem no banco de dados

6 respostas
Kiko1

Salve galera…

Criei um formulário de cadastro de produtos, com um jfilechooser, consigo buscar a imagem no meu pc e talz, mas o problema eh, como faço para enviar essa imagem para o banco de dados, e como recupero ela quando fizer uma pesquisa??

Já ouvi falar que há a possibilidade de salvar o caminho da imagem, só que não entendi direito…se alguém pudesse me mostrar um passo a passo ficaria agradecido…

Agradeçoo desde jáaa

6 Respostas

fabim

Amigao… mude de direção enqto ta aprendendo pq ai ja evita de 1 dia vc fazer a porcaria de botar imagem no banco de dados.

Faz assim: no registro referente à imagem, por ex: na coluna (DS_PATH_IMAGEM) vc coloca o “caminho”, path algo assim de ONDE está a imagem (num diretorio de arquivos)
Dai qdo for demandado (Ex: o cara clica em BAIXAR imagem) vc faz um I/O simples e escreve os bytes no response.

Imagens em banco geram problemas de performance na maioria das aplicacoes que o utilizam.

Kiko1

Amigoo

poderia me dar um exemplo de como faço isso?

Obrigado desde já pela ajuda

fabim

Vamos comecar pelo mais simples blz?
Crie 1 registro no banco de dados, com 1 coluna na qual vc vai guardar o CAMINHO de onde ela se encontra fisicamente no diretorio.
Vc vai LER essa imagem do diretorio assim:

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ImageServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {

		response.setContentType("image/jpeg");

		String pathToWeb = getServletContext().getRealPath(File.separator);
		File f = new File(pathToWeb + "avajavalogo.jpg");
		BufferedImage bi = ImageIO.read(f);
		OutputStream out = response.getOutputStream();
		ImageIO.write(bi, "jpg", out);
		out.close();

	}

}

Feito isso, vc vai pra parte de GRAVAR essa imagem (inserir registro no banco + guardar binario em disco)
Mas ai ja vou deixar vc pesquisar pq… o conteudo sobre isso é extenso. E vc precisa desenvolver a habilidade de pesquisar de maneira efetiva o que nao sabe.

Kiko1

Mas não teria como eu salvar o caminhoo no banco, e só usar o nome da imagem depois na aplicação, dai na hora de chamar unir as duas coisas?

Kiko1
jLabel32.setText(caminho+(RS.getString("foto")));

Seria mais ou menos assim, no lugar do caminho colokei o caminho aonde tah a imagem, e no foto peguei do banco o nome da foto, só q ainda não funcionou

=S

fwsales

Esse exemplo salva e mostra a imagem salvando apenas a URL!
Método que insere no banco:

public void inserir (Pessoa pes){
        String sql = "INSERT INTO pessoa (nome, telefone, sexo, estado_civil, url_foto) VALUES (?,?,?,?,?)";
        try{
            stmt = conn.prepareStatement(sql);
            stmt.setString(1, pes.getNome());
            stmt.setString(2, pes.getTelefone());
            stmt.setInt(3, pes.isSexo() ? 0 : 1);
            stmt.setInt(4, pes.getEstado_civil());
            stmt.setString(5, pes.getUrl_foto());
            stmt.execute();
            stmt.close();
        }catch(SQLException erro){
            throw new RuntimeException(erro);
        }
    }

Método que mostra do banco:

public ArrayList<Pessoa> mostrarNome (String nome){
        String sql = "SELECT * FROM pessoa WHERE nome LIKE '%"+nome+"%' ";
        try{
            st = conn.createStatement();
            rs = st.executeQuery(sql);
            while(rs.next()){
                Pessoa ps = new Pessoa();
                ps.setId(rs.getInt("id"));
                ps.setNome(rs.getString("nome"));
                ps.setTelefone(rs.getString("telefone"));
                ps.setSexo(rs.getInt("sexo") == 0 ? true : false );
                ps.setEstado_civil(rs.getInt("estado_civil"));
                ps.setUrl_foto(rs.getString("url_foto"));
                lista.add(ps);
            }
        }catch(SQLException erro){
            throw new RuntimeException(erro);
        }
        return lista;
    }

Método “Mouse Clicked”, ocorre quando eu clico em uma linha da JTable (situado na JFrame):

private void tbDadosMouseClicked(java.awt.event.MouseEvent evt) {
        //...
        //Abaixo mostra o que neste caso é o importante, como mostrar a foto na JLabel
        tfUrlFoto.setText(tbDados.getValueAt(tbDados.getSelectedRow(), PessoaTableModel.COL_URL).toString());
        lbFoto.setIcon(new ImageIcon(tbDados.getValueAt(tbDados.getSelectedRow(), PessoaTableModel.COL_URL).toString()));
}

Espero que ajude!

Criado 14 de novembro de 2011
Ultima resposta 17 de nov. de 2011
Respostas 6
Participantes 3