quarta-feira, 1 de abril de 2015

Foi dado como atividade à nossa turma de POO o desenvolvimento de um projeto de consulta a hyperlinks. É possível armazenar urls, nome, data de criação, adicionar comentários e metatags para cada hyperlink, e buscar um destes usando através de qualquer um dos campos (comentários e metatags também).

Meu grupo (eu e mais uma pessoa) escolhemos armazenar tudo em banco de dados, e trabalhar com consultas. Como foi feito em Java com Netbeans, fiquei responsável pela comunicação com o banco, utilizando MySQL e a API JDBC, que tem um driver bem simples de usar. Sugiro a leitura desta apostila da Caelum, pela qual eu também me baseei bastante.



Sobre banco de dados, um resumo básico: criamos tabelas que possuem colunas de "informações", e cada linha corresponde a uma informação. Foram criadas três tabelas, uma armazenando hyperlinks, outra relacionando hyperlinks a comentários e outra, hyperlinks a metatags, através da coluna ID_hyperlink.

ID e ID_Hyperlink iguais representa o mesmo hyperlink
 
O banco de dados não se comunica diretamente com Java. No entanto, a API, junto com o driver, fazem a parte do trabalho sujo de compatibilidade de interfaces.
Imagem retirada de apostila da Caelum
O driver cria uma conexão, e pelo próprio NetBeans enviamos o comando SQL para o banco de dados (por exemplo, inserir hyperlink na tabela Hyperlink). Se for um comando de busca, o MySQL retorna uma lista de resultados da consulta.

Por isso, precisamos de uma classe DAO (Data Acess Object), única responsável pelo acesso ao banco de dados. A classe tem objetivos específicos:
  • Inserir um hyperlink;
  • Deletar um hyperlink e seus respectivos comentários e metatags;
  • Pesquisar e retornar os hyperlinks utilizando um dos atributos como campo de pesquisa (url, nome, data, comentário ou metatag);
  • Editar um hyperlink e seus respectivos comentários e metatags.
A classe ainda deve ter um construtor, que cria uma conexão com o banco de dados, e um destrutor, que encerra a conexão.

Para implementar as funções, é suficiente um pouco conhecimento de SQL (select, insert, update, join) e de como funcionam as queries. Um comando select retorna o ResultSet, próprio da API, que é apenas uma lista que possui os atributos indicados pela respectiva coluna equivalente do banco de dados (ou seja, lista[0].nome, lista[0].url...).

O único problema (além dos eventuais bugs) é integrar as tabelas de comentários e metatags à de hyperlinks. No entanto, basta fazer uma busca por todos os ids únicos da tabela de hyperlinks que atendem à busca, e mais duas buscas unindo as tabelas metatag-hyperlink, comentário-hyperlink ordenando por id de hyperlink, e para cada id único da primeira busca percorrer todos que possui em comum o id de hyperlink (em sequência) das demais buscas.

O programa foi feito utilizando como interface gráfica o próprio prompt de comando bem simples, mas bem interessante:
Colocamos o código no github, mas você provavelmente não conseguirá rodar, já que o banco de dados é local: https://github.com/leaomatheus/ProjectBoot



Até mais!

Nenhum comentário:

Postar um comentário