Como recuperar imagem de um campo BLOB do MySQL [RESOLVIDO]?

3 respostas
B

Ae galera

Eu preciso resgatar uma imagem de um campo blob do mysql.
Eu inseri (acho q inseri certo), agora eu preciso resgatar

Eu pesquisei sobre isso, soh q nao achei como resgatar a imagem

Eu sei q MUIITAAAA gente falou pra gravar apenas o caminho da imagem no banco, soh q no meu problema eu preciso mesmo gravar a imagem no banco

O método para adicionar a imagem foi esse

public class ImagemDB {
	
	public void insereImagem(int cod, File image, FileInputStream fis){
		
		String sql = "INSERT INTO imagem VALUES(?,?)";
		
		try{
			Connection conn = ConnectionDB.getConnection();
			PreparedStatement pstm = (PreparedStatement) conn.prepareStatement(sql);
			
			pstm.setInt(1, cod);
			pstm.setBinaryStream(2, fis, (int) image.length());
			
			pstm.execute();
		}catch(Exception e){
			e.printStackTrace();
		}
	}}

A classe que vai mostrar a imagem é essa

package Teste;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.swing.JFrame;
import javax.swing.JPanel;

import ClassesGUI.JImagePanel;

public class ImagemGUI extends JFrame{
	
	private JImagePanel container = null;
	
	public ImagemGUI() throws IOException{
		super();
		initialize();
	}
	
	public void initialize() throws IOException{
		
		this.setSize(500,500);
		this.setContentPane(getContainer());
	}
	
	public JPanel getContainer() throws IOException{
		
		if(container == null){
			
                       
			File image = new File("ubatuba6.jpg"); 
			FileInputStream fis = new FileInputStream(image);
			
                        
			new ImagemDB().insereImagem(1, image, fis); //grava a imagem no banco
			
                        //Essa classe JImagePanel foi o vinnyGodoy que fez, ela deixa uma imagem no fundo de um "JPane", o construtor vc passa o endereço, ou um objeto File;
                l
			container = new JImagePanel();
			container.setLayout(null);
			
		}
		return container;
	}
	
	public static void main(String args[]) throws IOException{
		
		ImagemGUI i = new ImagemGUI();
		i.setVisible(true);
	}
}

Eu quero saber como recuperar a imagem do MySQL e adicionar ela em um objeto File

Atenciosamente

3 Respostas

B

Resolvi o problema galera

vou postar a solução

public File capturaImagem(int cod){
		
		File image = null;
		Blob blob = null;
		InputStream bin = null;
		FileOutputStream bout = null;
		byte[] bbuf = new byte[1024];
		int bytesRead = 0;
		
		String sql = "SELECT image_full FROM imagem WHERE id = "+ cod;
		
		try{
			Connection conn = ConnectionDB.getConnection();
			Statement stm = conn.createStatement();
			ResultSet rset = stm.executeQuery(sql);
			
			rset.next();
			
			blob = rset.getBlob("image_full");  
			bin = blob.getBinaryStream();  
			bout = new FileOutputStream("teste.jpg");  
			
			
			while ((bytesRead = bin.read(bbuf)) != -1) {  
			     bout.write(bbuf, 0, bytesRead);  
			}  
		
		}catch(Exception e){
			e.printStackTrace();
		}
		
		image = new File("teste.jpg");
		
		return image;
		
	}

Essa método busca a imagem no banco, grava um arquivo em disco na pasta do projeto e depois eu pego esse arquivo e carrego no objeto image que é uma instancia de File

^^

V

Dê também uma olhada nos método ImageIO.write e ImageIO.read. Ambos tem uma versão que aceita um OuputStream/InputStream. Dessa forma, você pode evitar aquele while. :wink:

B

hehehe

Vou dar uma lida vinyGodoy

Gostaria de agradecer a vc, eu uso uma classe sua aquela JImagePanel muito util

Obrigado ^^

Criado 3 de agosto de 2009
Ultima resposta 4 de ago. de 2009
Respostas 3
Participantes 2