DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 
DevWare  
Novidade: DevMedia lança o DevWare - Saiba mais!


  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL
ou 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.

[fechar]

Você não gostou da qualidade deste conteúdo?

(opcional) Você gostaria de comentar o que não lhe agradou?

Esse artigo faz parte da revista Java Magazine edição 44. Clique aqui para ler todos os artigos desta edição

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-estruturadas, que fogem aos tipos de dados simples como inteiros, datas e strings. Bancos de dados com capacidade de armazenar imagens, planilhas e outros tipos de documentos, lado a lado com informações estruturadas em campos e registros, ganharam até nomes pomposos: “bancos de dados multimídia” e “universal databases”. Estes bancos têm inúmeras aplicações em comércio eletrônico, sistemas de segurança, recursos humanos, entre outras possibilidades.

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.

 

Listagem 1. InsereImagem.java – programa mínimo para uso de BLOBs em Java

import java.sql.*;

import java.io.*;

import java.util.*;

 

class InsereImagem

{

  public static void main(String args[]) throws Exception {

  

  // valida a linha de comando

  if (args.length != 2) {

    System.err.println("Uso: InsereImagem <arquivo> <descr>");

    System.exit(-1);

  }

  

  // lê a imagem para um byte[]

  File img = new File(args[0]);

  byte[] imagem = new byte[(int)img.length()];  

  System.out.println("Lendo " + img.length() + " bytes...");

 

  DataInputStream is = new DataInputStream(

    new FileInputStream(args[0]));

  is.readFully(imagem);

  is.close();"

A exibição deste artigo foi interrompida.

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL
ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!


Fernando Lozano
é 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.
O que você achou deste post?

    0 COMENTÁRIO

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


Nenhum comentário foi postado - seja o primeiro a comentar!
Cursos relacionados
Publicidade
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
[Fechar] Você precisa estar logado para dar seu feedback.

Clique aqui para efetuar o login

Caso não tenha um cadastro DevMedia, clique aqui para se cadastrar (gratuito)
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03