Campo Blob para um Image

Boas…

Preciso de uma ajuda para resolver o seguinte problema:
Eu tenho armazenada em uma tabela no banco de dados(oracle) informações de um determinado individuo, uma das colunas armazena a foto (esse campo é do tipo Blob). Bom, o que eu quero fazer é pegar esse dado(foto) e jogar em um java.awt.Image.

Agradeço desde já!!

Bem, apos pegar o InputStream do ResultSet, basta fazer algo como:

JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(new FileInputStream(f)); // a partir dos bytes que vem do banco você gera esse objeto direito
BufferedImage image =decoder.decodeAsBufferedImage() ;

E com a BufferedImage você faz o que bem entender hehe olha a api dessa classe:
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/image/BufferedImage.html

[quote=LIPE]Bem, apos pegar o InputStream do ResultSet, basta fazer algo como:

JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(new FileInputStream(f)); // a partir dos bytes que vem do banco você gera esse objeto direito
BufferedImage image =decoder.decodeAsBufferedImage() ;

E com a BufferedImage você faz o que bem entender hehe olha a api dessa classe:
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/image/BufferedImage.html[/quote]

Por favor, veja como eu armazeno as fotos

package bio.core;

import java.sql.*;

public class FotosBanco {

private int idFilial = 0;
private int idCliente = 0;
private Blob foto = null;

/** Creates a new instance of FotosBanco */
public FotosBanco() {
}

public FotosBanco(int idFilial, int idCliente) {
    String sql = null;
    sql = " "+
    " SELECT id_filial, id_cliente, foto" +
    " FROM integracao.fotos " +
    " WHERE id_filial  = " + idFilial + " " +
    "   AND id_cliente = " + idCliente;
    Statement st = ConnectionPool.getConnection().createStatement();
    ResultSet rs = st.executeQuery(sql);
    try{
        if(!rs.next()){
            throw new BioException("Nao existe foto cadastrada para o id cliente: " + idCliente);
        }
        else{
            setIdFilial(rs.getInt(1));
            setIdCliente(rs.getInt(2));
            setFoto(rs.getBlob(3));
        }
    }
    catch(SQLException e) {
        e.printStackTrace(System.err);
        BioException ex = new BioException("Erro na leitura dos dados.");
        ex.fillInStackTrace();
        throw (ex);
    }
}        
    
    // GET //
    public int getIdFilial() {
        return idFilial;
    }
    
    public int getIdCliente() {
        return idCliente;
    }
    
    public Blob getFoto() {
        return foto;
    }
    
    // SET //
    public void setIdFilial(int idFilial) {
        this.idFilial = idFilial;
    }
    
    public void setIdCliente(int idCliente) {
        this.idCliente = idCliente;
    }
    
    private void setFoto(Blob foto) {
        this.foto = foto;
    }
    
}

vc poderia me dar uma luz, para quando eu setar um Image com esse Bolb!

Um jeito que acabei de pensar:

		byte[] b = new byte[ 50 ]; // pega os bytes do banco
		ByteArrayInputStream ba = new ByteArrayInputStream( b );
		JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder( ba );
		BufferedImage image = decoder.decodeAsBufferedImage();
		Graphics g = image.getGraphics();
		
		ba.close();

Isso talvez sirva como base para uma solução melhor. Não seja preguiçoso :smiley:

E, aliás, por que está usando blob? Para ter que ficar tratando SQLException a toa em todo lugar?

Bons estudos.

[quote=LIPE]Um jeito que acabei de pensar:

		byte[] b = new byte[ 50 ]; // pega os bytes do banco
		ByteArrayInputStream ba = new ByteArrayInputStream( b );
		JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder( ba );
		BufferedImage image = decoder.decodeAsBufferedImage();
		Graphics g = image.getGraphics();
		
		ba.close();

Isso talvez sirva como base para uma solução melhor. Não seja preguiçoso :smiley:

E, aliás, por que está usando blob? Para ter que ficar tratando SQLException a toa em todo lugar?

Bons estudos.[/quote]

Valeu Lipe…deixa eu queimar uns neurônios!!! Agora em relação ao “Blob”, eu estou usando ele devido ao campo na tabela ser desse tipo, eu não conheço outras maneiras para se manipular esse tipo de informação…muito inexperiente ainda… :cry:

byte[] b = rs.getBytes()

:smiley:

Leia a api … leia a api … leia a api …