Eu uso esse trecho de codico para inserir
InputStream img = new FileInputStream(new File(ImgPath));
byte[] img2 = new byte[img.available()];
produto.setImagem(img2);
Eu uso esse trecho de codico para inserir
InputStream img = new FileInputStream(new File(ImgPath));
byte[] img2 = new byte[img.available()];
produto.setImagem(img2);
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
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())});
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.
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); }