Imagem Banco para JLabel

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 :smiley:

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.