Este é um post disponível para assinantes MVPou para quem possui Créditos DevMedia. Clique aqui para saber mais!
Artigo Java Magazine 44 - BLOBs com JDBC e Swing
Artigo publicado pela Java Magazine 44.
Você não gostou da qualidade deste conteúdo?
(opcional) Você gostaria de comentar o que não lhe agradou?

BLOBs com JDBC e Swing
Aprenda a lidar com campos binários em Java
Como armazenar e recuperar de forma eficiente e portável imagens e documentos em bancos relacionais, usando threads com Swing para não deixar sua aplicação com aparência de congelada
Um dos recursos mais chamativos dos bancos de dados modernos é o suporte a informações não
Mas lidar com dados não-estruturados na maioria dos bancos relacionais não é tarefa trivial. A programação em geral foge ao estilo usual do SQL, e obter performance adequada exige conhecimento avançado tanto do desenvolvedor de aplicações quando do administrador do banco de dados. Na essência, dados multimídia são armazenados em bancos de dados como grandes “campos binários”, os BLOBs – Binary Large Objects. Eles não estão restritos pelas limitações de tamanho de campos decimal e varchar tradicionais; por outro lado estes campos não podem ser utilizados livremente para compor índices ou cláusulas where.
Felizmente a linguagem Java torna as coisas mais fáceis, ao oferecer como parte do padrão JDBC alguns métodos e classes especialmente criados para a manipulação dos BLOBs.
Este artigo apresenta uma aplicação de visualização de imagens, que permite ler imagens em qualquer formato suportado pelo Java (como GIF, PNG e JPEG), oriundas tanto de arquivos em disco quando de um banco de dados. A aplicação de exemplo também demonstra melhores práticas no desenvolvimento Swing, ao garantir que a interface com o usuário não fique “congelada” durante a carga das imagens.
Os exemplos foram testados com três bancos de dados: HSQLDB, MySQL e PostgreSQL. Já as fotos que ilustram os exemplos foram obtidas no site do jornal italiano La Republica, em matéria onde a agência de notícias Reuters elege as melhores fotos do ano no jornalismo europeu: www.repubblica.it/2006/05/gallerie/esteri/reuters-foto-anno/2.html.
Para acompanhar este artigo, é importante que o leitor tenha conhecimentos básicos de Swing, APIs de E/S do Java (pacote java.io) e configuração do banco de dados utilizado. A série de artigos sobre os fundamentos do JDBC, publicados nas edições 42 e 43, servem como ponto de partida.
Inicializando o BD
A forma mais simples de se lidar com campos BLOB é simplesmente tratá-los da mesma forma que seriam tratados outros tipos de dados pelo JDBC: eles podem ser manipulados como se fossem simples valores passados como parâmetros para comandos SQL e recuperados como parte de resultados de consultas.
Mais especificamente, as interfaces ResultSet e PreparedStatement (em java.sql) fornecem os métodos getObject() e setObject(), que permitem ler e salvar objetos Java quaisquer, fazendo automaticamente as conversões necessárias.
Entretanto, muitos drivers JDBC irão serializar e desserializar automaticamente objetos Java passados para estes métodos, o que pode causar problemas de portabilidade dos dados para aplicações não-Java. Para evitar problemas, coloque a informação desejada em seu formato “nativo”, dentro de um array de bytes (byte[]). Assim é evitado o uso da serialização com o banco de dados. Será responsabilidade da aplicação converter este array de bytes no objeto Java desejado.
A Listagem 1 apresenta o código de um programa simples (InsereImagem.java) que recebe o nome de um arquivo e uma descrição deste arquivo pela linha de comando. O arquivo e a sua descrição são então inseridos no banco de dados da aplicação de exemplo. A mesma listagem mostra exemplos da execução deste programa, utilizando as imagens inclusas junto com os fontes para download deste artigo.
Este é um post disponível para assinantes MVPou para quem possui Créditos DevMedia. Clique aqui para saber mais!
é consultor independente, ativista do software livre e professor da Faculdade Metodista Bennett, além de autor do livro “Java em GNU/Linux” (Editora Alta Books). É detentor de certificações da Sun, IBM, Microsoft e Red Hat, sendo uma espécie de “agente duplo” nas várias tribos.



