Não consigo exibir imagem retornada do BD como array de bytes  XML
Índice dos Fóruns » Interface Gráfica
Autor Mensagem
walterfelipe
JavaChild
[Avatar]

Membro desde: 08/01/2007 13:54:08
Mensagens: 136
Localização: Recife-PE
Offline

Oie pessoal, tou com problemas pra exibir em um JInternalFrame uma imagem que retorno do meu banco de dados.Consigo carregar ela na tela quando alimento via caminho da imagem no meu disco mas quando construo um objeto do tipo Image e tento setar para um Label no JInternalFrame a coisa não funciona. vou postar os códigos da busca onde eu retorno o objeto e esse atributo que é vem como um array de bytes.


Aqui retorno do banco
[code]

conexao = new Conexao();
conexao.setAutoCommit(false);
sql = "select Codigo,Autor, Editora, Edicao, Numero, Duracao, Image, Formato From Multimidia_Tab where Numero= ?";

// prepare blob object from an existing binary column

pstmt = conexao.getConexao().prepareStatement(sql);
pstmt.setInt(1,numero);
ResultSet rs = pstmt.executeQuery();

if(rs.next()){



multimidia = new Multimidia(rs.getInt(1),
rs.getString(2),
rs.getString(3),
rs.getString(4),
rs.getInt(5),
rs.getString(6),
rs.getString(8),
rs.getBytes(7));

[/code]



mando preencher os campos de tela com o objeto recuperado

[code]preencheCampos(multimidia);[/code]



o meu preenche campos alimenta os objetos na tela e carrega o JInternalFrame com uma imagem vinda no objeto e recuperada do banco

[code]


/**metodo que carrega na tela os dados da multimidia
*
* @param multimidia
*/

private void preencheCampos(Multimidia multimidia){

setNumero(multimidia.getNumero());
setCodigo(multimidia.getCodigo());
setAutor(multimidia.getAutor());
setEdicao(multimidia.getEdicao());
setEditora(multimidia.getEditora());
setDuracao(multimidia.getDuracao());
setFormato(multimidia.getFormato());
carregaImagem(Util.retornaImagemFromByteArray(multimidia.getImagem()));

}
[/code]


[code]

public static Image retornaImagemFromByteArray(byte[] arrayByte){

Image image = null;
try {
image = Toolkit.getDefaultToolkit().createImage(arrayByte);
} catch (RuntimeException e) {

System.out.println("Util::retornaImagemFromByteArray::"+e);
}

return image;
}


[/code]



[code]

private void carregaImagem(Image imagem) {
Image image = imagem;
String pathImagem = null;

if(image == null) {
pathImagem = Util.retornaArquivoSelecionado().getAbsolutePath();
if (pathImagem != null) {
image = Toolkit.getDefaultToolkit().getImage(pathImagem);
pathImagemLocal = pathImagem;
}
}

if(image != null){

ImageIcon icon = new ImageIcon(image);
JLabel label = null;
label = new JLabel(icon);
label.setSize(new Dimension(icon.getIconWidth(), icon.getIconHeight()));
jInternalFrameImagem.setDefaultCloseOperation(jInternalFrameImagem.DISPOSE_ON_CLOSE);
jInternalFrameImagem.setMaximizable(true);
jInternalFrameImagem.setVisible(false);
jInternalFrameImagem.getContentPane().removeAll();
jInternalFrameImagem.getContentPane().repaint();
jInternalFrameImagem.setBounds(0, 0, label.getWidth(),label.getHeight());
jInternalFrameImagem.getContentPane().add(label);
jInternalFrameImagem.validate();
jInternalFrameImagem.repaint();
jInternalFrameImagem.setVisible(true);

}



}

[/code]



Quando informo a imagem vinda do disco tudo ok, mostra legal, porém vindo do banco tá se quebrando. Peço ajuda pois ão tou conseguindo achar solução. Obs : Criar um arquivo no disco com os bytes vindos do banco e depois jogar na tela não é uma solução :( O professor não vai aceitar.

Walter Felipe
Apaixonado por estrada e motocicletas
Analista de Sistemas
Especialista em Engenharia de Software
SCJP - Sun Certified Java Programmer
SCWCD - Sun Certified Web Component Developer
http://www.cin.ufpe.br/~wfs
[WWW] [Yahoo!] [MSN]
walterfelipe
JavaChild
[Avatar]

Membro desde: 08/01/2007 13:54:08
Mensagens: 136
Localização: Recife-PE
Offline

Resposta:
ResultSet rs = pstmt.executeQuery();
java.sql.Blob blob = rs.getBlob(7));
byte[] array = blob.getBytes(1, (int) blob.length());

O problema era que o array de bytes inserido no banco estava correto, mas o retorno dele através do rs.getBytes() vinha com tamanho diferente do array de bytes inserido. Quando eu recupero com rs.geBlob vem com o tamanho certo. então é só extrair o array de bytes do blob e gerar a imagem.

Walter Felipe
Apaixonado por estrada e motocicletas
Analista de Sistemas
Especialista em Engenharia de Software
SCJP - Sun Certified Java Programmer
SCWCD - Sun Certified Web Component Developer
http://www.cin.ufpe.br/~wfs
[WWW] [Yahoo!] [MSN]
 
Índice dos Fóruns » Interface Gráfica
Ir para:   
Powered by JForum 2.1.8 © JForum Team