[Resolvido]Como Recuperar imagem do Banco de Dados em uma Tabela

4 respostas Resolvido
imagejtablemysqljava
R

Eu uso esse trecho de codico para inserir

InputStream img = new FileInputStream(new File(ImgPath));
byte[] img2 = new byte[img.available()];
produto.setImagem(img2);

4 Respostas

S

Assim você está alocando um array de bytes com o tamanho retornado pelo available(), mas o array continuará vazio (preenchido com zeros).

Faz assim:

InputStream img = new FileInputStream(new File(ImgPath));
byte[] buffer= new byte[4096];
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
for (int lidos = -1; (lidos = img.read(buffer)) != -1; bytes.write(buffer, 0, lidos)); // for sem corpo mesmo
produto.setImagem(bytes.toByteArray());

Só acho estranho você salvar o caminho do arquivo no banco de dados.
Nada impede de alguém ir no diretório e apagar a imagem.
Eu salvaria a própria imagem no banco como um BLOB

R

Eu estou salvando em blob no banco só queria recupear a imagem do banco e inserir na tabela

modeloTabela.addRow(new String[]{Integer.toString(produto.getIdProduto()),produto.getNomeProduto(),
produto.getAddData(), Double.toString(produto.getPreco())});

S

De antemão já te aviso, não usa DefaultTableModel, cria tua própria implementação de TableModel, aí não vai mais precisar dessa gambiarra de ficar chamando o método addRow. Veja este exemplo.

E pra renderizar a imagem na JTable, em principio basta no método getValueAt(lin, col) do modelo, você retornar um objeto do tipo ImageIcon quando a coluna for do campo imagem.

J
Solucao aceita

Bom dia!

Em um projeto que desenvolvi eu armazeno imagens do tipo BLOB no banco de dados, e para recuperar eu faço da seguinte maneira:

– Método utilizado para recuperar a imagem.

public void retornaImagem(InputStream is, JLabel label, int lar, int alt) throws FileNotFoundException, IOException, SQLException {

if (is != null) {

        int len;
        int size = 1024;
        byte[] buf;

        if (is instanceof ByteArrayInputStream) {
            size = is.available();
            buf = new byte[size];
            len = is.read(buf, 0, size);
        } else {
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            buf = new byte[size];
            while ((len = is.read(buf, 0, size)) != -1) {
                bos.write(buf, 0, len);
            }
            buf = bos.toByteArray();
        }

        ImageIcon im = new ImageIcon(buf);
        im.setImage(im.getImage().getScaledInstance(lar, alt, Image.SCALE_DEFAULT));
        label.setIcon(im);
    } else {
        label.setIcon(null);
    }
}

– Método utilizado para apresentar imagem na tela (Neste caso minha imagem é exibia em um Label).

private void preencherImagem() throws IOException, FileNotFoundException, SQLException{

jLImagem.setIcon(null);

RetornaImagem ri = new RetornaImagem();

ri.retornaImagem(meumodelo.getImImagem().getBinaryStream(), jLImagem, 210, 200);

}
Criado 22 de novembro de 2016
Ultima resposta 23 de nov. de 2016
Respostas 4
Participantes 3