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.
Bem, apos pegar o InputStream do ResultSet, basta fazer algo como:
JPEGImageDecoderdecoder=JPEGCodec.createJPEGDecoder(newFileInputStream(f)); // a partir dos bytes que vem do banco você gera esse objeto direitoBufferedImageimage=decoder.decodeAsBufferedImage();
Bem, apos pegar o InputStream do ResultSet, basta fazer algo como:
JPEGImageDecoderdecoder=JPEGCodec.createJPEGDecoder(newFileInputStream(f)); // a partir dos bytes que vem do banco você gera esse objeto direitoBufferedImageimage=decoder.decodeAsBufferedImage();
privateintidFilial=0;privateintidCliente=0;privateBlobfoto=null;/** Creates a new instance of FotosBanco */publicFotosBanco(){}publicFotosBanco(intidFilial,intidCliente){Stringsql=null;sql=" "+" SELECT id_filial, id_cliente, foto"+" FROM integracao.fotos "+" WHERE id_filial = "+idFilial+" "+" AND id_cliente = "+idCliente;Statementst=ConnectionPool.getConnection().createStatement();ResultSetrs=st.executeQuery(sql);try{if(!rs.next()){thrownewBioException("Nao existe foto cadastrada para o id cliente: "+idCliente);}else{setIdFilial(rs.getInt(1));setIdCliente(rs.getInt(2));setFoto(rs.getBlob(3));}}catch(SQLExceptione){e.printStackTrace(System.err);BioExceptionex=newBioException("Erro na leitura dos dados.");ex.fillInStackTrace();throw(ex);}}// GET //publicintgetIdFilial(){returnidFilial;}publicintgetIdCliente(){returnidCliente;}publicBlobgetFoto(){returnfoto;}// SET //publicvoidsetIdFilial(intidFilial){this.idFilial=idFilial;}publicvoidsetIdCliente(intidCliente){this.idCliente=idCliente;}privatevoidsetFoto(Blobfoto){this.foto=foto;}}
vc poderia me dar uma luz, para quando eu setar um Image com esse Bolb!
_fs
Um jeito que acabei de pensar:
byte[]b=newbyte[50]; // pega os bytes do bancoByteArrayInputStreamba=newByteArrayInputStream(b);JPEGImageDecoderdecoder=JPEGCodec.createJPEGDecoder(ba);BufferedImageimage=decoder.decodeAsBufferedImage();Graphicsg=image.getGraphics();ba.close();
Isso talvez sirva como base para uma solução melhor. Não seja preguiçoso
E, aliás, por que está usando blob? Para ter que ficar tratando SQLException a toa em todo lugar?
Bons estudos.
robinsonbsilva
LIPE:
Um jeito que acabei de pensar:
byte[]b=newbyte[50]; // pega os bytes do bancoByteArrayInputStreamba=newByteArrayInputStream(b);JPEGImageDecoderdecoder=JPEGCodec.createJPEGDecoder(ba);BufferedImageimage=decoder.decodeAsBufferedImage();Graphicsg=image.getGraphics();ba.close();
Isso talvez sirva como base para uma solução melhor. Não seja preguiçoso
E, aliás, por que está usando blob? Para ter que ficar tratando SQLException a toa em todo lugar?
Bons estudos.
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…