Olá,
Estou como seguinte problema, tenho uma imagem armazenada no banco de dados(MySQL) gostaria de carregar ela direto em um JLabel sem precisar armazenar a imagem em um TEMP pra depois carregar.
OBS: Campo longblob no Banco de Dados.
Se alguém puder me ajudar ficarei agradecido.
Olha colega, posso estar errado mas …
Sempre aprendi que é uma péssima prática de programação armazenar imagens em BD.
O que devemos fazer é colocar as imagens em um diretorio e, no BD, colocar uma variavel com o caminho completo desta imagem. Lá na aplicação basta chamar esta variavel e, pelo caminho, carregar a imagem.
Se estiver errado, por favor me corrijam …
Vimieiro
Sim vimieiro, mas é que no meu caso estou trabalhando com EJB seria inviável o cliente
ter que baixar todas as imagens, pois qualquer máquina na rede poderia acessar a
aplicação.
Você concorda comigo?
Fiz correndo aqui, não testei, mas o caminho é mais ou menos esse.
[code]
SerialBlob blob = new SerialBlob( seuStatement.getBlob( “coluna” ) );
BufferedInputStream stream = new BufferedInputStream( blob.getBinaryStream() );
byte[] dados = new byte[ stream.avaliable() ];
stream.read( dados, 0, dados.length );
seuLabel.setIcon( new ImageIcon( dados ) );[/code]
Até mais!
Valeu davidbuzatto,
Uma outra maneira é essa:
String Out = null;
String c=null;
Image img=null;
try {
Connection Conn = getConnection();
Statement Stmt = Conn.createStatement();
ResultSet Rs = Stmt.executeQuery("select Imagem from tblimagem WHERE IDImagem=9;");
if (Rs.next()){
img = Toolkit.getDefaultToolkit().createImage(Rs.getBytes(1));
}
Conn.close();
Stmt.close();
System.out.println("Imagem= "+img);
jLabel1.setIcon(new javax.swing.ImageIcon(img));
} catch(Exception ex){
ex.printStackTrace();
}
Talvez vc precise melhorar a leitura dos dados se vc tiver imagens muito grandes… As vezes o buffer é iniciado com uma capacidade menor do que o tamanho total da imagem.
Tente usar o DataInputStream, as vezes o resultado é melhor e tem como vc ir mandando ele ler os bytes usando o método readByte().
Até mais!
[quote=amgarcia]Valeu davidbuzatto,
Uma outra maneira é essa:
String Out = null;
String c=null;
Image img=null;
try {
Connection Conn = getConnection();
Statement Stmt = Conn.createStatement();
ResultSet Rs = Stmt.executeQuery("select Imagem from tblimagem WHERE IDImagem=9;");
if (Rs.next()){
img = Toolkit.getDefaultToolkit().createImage(Rs.getBytes(1));
}
Conn.close();
Stmt.close();
System.out.println("Imagem= "+img);
jLabel1.setIcon(new javax.swing.ImageIcon(img));
} catch(Exception ex){
ex.printStackTrace();
}
[/quote]
É verdade 
Abraço!
[quote=davidbuzatto]Talvez vc precise melhorar a leitura dos dados se vc tiver imagens muito grandes… As vezes o buffer é iniciado com uma capacidade menor do que o tamanho total da imagem.
Tente usar o DataInputStream, as vezes o resultado é melhor e tem como vc ir mandando ele ler os bytes usando o método readByte().
Até mais![/quote]
Valeu irei dar uma olhada nisso.