Olá, pessoal. Desculpem-me pela demora e pela pausa no assunto anterior, mas me envolvi em alguns projetos e estou "correndo mais que notícia ruim". Mas isso não significa que a coluna ficará abandonada. Prometo recuperar o tempo perdido assim que possível.
Neste artigo veremos como gravar e ler imagens de um banco de dados (algo que é muito pedido por e-mails).
Let's Rock!
Para armazenar as imagens em um banco, precisamos definir o campo que irá contê-la como um tipo especial que suporte formatos que não sejam plain text: o Blob.
Blob (em JAVA)
Blob é uma interface JDBC mapeada para um tipo SQL BLOB. Um blob é obtido pelo método getBlob() de um ResultSet ou de um CallableStatement.
Um blob possui também métodos para recuperar seu número de bytes e determinar a posição inicial de outro Blob ou um array de bytes no blob atual.
Este métodos funcionam sem materializar os dados. Para materializar os dados, podemos utilizar o método getBinaryStream() ou getBytes().
Para armazenar o blob, utilizamos o método setBlob() a partir de um PreparedStatement ou updateObject de um ResultSet atualizável.
Vejamos agora como inserir uma imagem em um campo
Blob:
try{
...
File arquivo = new File(...);
FileInputStream inputStream = new FileInputStream(arquivo);
PreparedStatement pstmt = conn.prepareStatement("insert into
IMAGE_TABLE values (?,?)");
pstmt.setString(1,arquivo.getName());
pstmt.setBinaryStream(2,inputStream,(int)arquivo.length());
pstmt.executeUpdate();
...
}
catch(...){
...
}
A seguir, veremos como obter uma imagem salva em
um campo Blob:
try{
...
rs = pstmt.executeQuery();
if( rs.next() ){
Blob blob = rs.getBlob(1);
ImageIcon imageIcon = new ImageIcon(blob.getBytes(1, (int)blob.length()));
}
...
}
catch(...){
...
}
Espero que o exemplo seja útil para vocês assim como foi para todos aqueles que me pediram por e-mail!
Ficamos por aqui pessoal. Um forte abraço e até a próxima!

Olá,
Quando da recuperação da imagem, é criada um arquivo do mesmo tamanho da imagem, mas não é possível vizualizá-lo. Qual será o problema?
Agradeço a atenação,

Só parabenizando pelo artigo... Era exatamente o que eu estava precisando, funcionou direitinho :)
Responder comentárioOs textos publicados neste espaço são de responsabilidade única de seus autores (colunistas e leitores) e podem não expressar necessariamente a opinião do iMasters.
Christiano Pinheiro é desenvolvedor do iBanking da Caixa para Handhelds e diretor tecnológico da Systray.
2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.