Página Inicial do Fórum > [Tutoriais] - Banco de Dados

Acessando dados com Java: 1º parte - Simples Dao



Criar novo tópico   Responder tópico


  1. jesuino
    Posts:1953


    Comment Arrow

    Publicado em: 13/07/2009 13:16:41

    Leia a parte 2 deste artigo.

    Esse tutorial pretende mostrar como operações como busca, deleção, atualização e inserção de dados no banco podem ser feitas com diversas tecnologias. Assim, podemos ter um repositório de tutorias sobre as mais diversas API's, tecnologias e frameworks que estão no mundo Java com um exemplo simples e de fácil entendimento.

    Embora aqui no fórum tenhamos muitos tutoriais com acesso a banco de dados, esse pretende ser um pouco diferente, pois iremos utilizar as classes demonstradas hoje para construir outras partes em outras tecnologias.

    Primeiramente parte iremos abordar somente o banco de dados e a manipulação dos dados em modo texto.

    Futuramente, pretendemos usar essas mesmas classes com Java Swing entre outras tecnologias.

    Por ser um primeiro exemplo simples, essa primeira parte desconsiderou algumas boas práticas e uso de alguns comandos um pouco mais complexos, e quebramos alguns padrões, como exibição de mensagem ser da responsabilidade da view. Assim, na segunda parte iremos mostrar como deixar o acesso mais limpo e flexível, eliminando muitos pontos fracos do código!

    Sem papo, o aplicativo

    Primeiro vamos definir o que iremos tratar, que tal uma pessoa? Ok, pessoa!!

    Nossa pessoa precisa se identificar, RG! Mas você não chama as pessoas pelo RG, então colocaremos o nome da pessoa também e mais estado, cidade, idade e só.

    Toda tabela precisa de um identificador único que chamamos de chave primária, ou seja, algo que diferencie uma tabela das outras. No caso da pessoa, a chave é o RG.

    Agora vamos criar isso no banco de dados, estamos usando MySql.
    Dúvidas com a instalação do MySQL?
    Criamos um database com o nome "javafx_crud"(você pode criar com o nome que quiser), o script para a criação da tabela ficou assim:


    Não estamos usando trigramação, afinal temos somente uma entidade(tabela)...

    Rodando o Script você terá sua tabela no banco de dados fisicamente.

    Sugestão: Usem MySql e MySql - Front


    Para salvar os dados você tem que logar no banco e ir inserindo usando o comando INSERT, ou pela interface que os SGBDs(programa que gerencia o banco) oferecem.
    Mas isso não é usual, o interessante é ter um aplicativo que faz isso, acessa o banco e permite as funcionalidades, sem o usuário conhecer o banco de dados.
    Em Java, como em qualquer outra linguagem(exceto algumas específicas, como ABAP, mas isso já são outros 500), você tem que se conectar ao banco de dados para realizar ações com os dados. Dependendo do banco que você utiliza, existe um .jar que permite o acesso.

    O JAR para o MySQL está anexo!

    Quanto a manipulação, você pode usar um framework(ex: Hibernate, neste caso até a conexão) de persistência ou a solução nativa de java JDBC. JDBC é menos flexível que um framework, mas é mais simples para nosso projetinho, vamos usar JDBC!

    Crie um projeto Java no eclipse , chame como quiser , depois comece a codificação!

    Hora de código

    O comum em Java é criarmos classes Pojo, classes que são semelhantes a tabelas do banco, assim podemos manipular de forma igual para igual ao que está no banco. Nossa classe pessoa:

    Claro, todos os atributos estão encapsulados, nunca use atributo público, use sempre métodos de acesso a atributos declarados como privados.

    Essa classe é parte de um projeto MVC, ela é o modelo, ou model, por isso estará no pacote(usamos para dividir nosso projeto melhor) model, então crie um pacote e coloque esse código em um arquivo .java lá.

    É importante a divisão de papéis: quem é Model, Control e View, assim podemos usar o que for definido hoje nos projetos futuros.
    Agora vamos implementar a parte de banco de dados, meio chato mais temos que fazer.

    Para a conexão temos uma classe que faz a função de fábrica de conexões. Isso mesmo, o padrão Factory que usamos em um projeto muito antigo, mas serve para esse da mesma forma. Obeserve que para outros bancos de dados você deve alterar a fábrica, essa só tem a parte do MySql.
    Essa classe foi alocada no pacote "banco", então não perca tempo e crie o pacote "banco"(que estará em outro pacote futuramente, o dao).

    Perceba que a classe lança um exceção quando algo da errado na conexão com o banco, e muita coisa pode dar errado!


    Lembre-se de incluir o JAR no seu projeto para o driver do MySQL!!

    Clique com o botão direito em cima do seu projeto, escolha propriedade. Na janela propriedades, escolha JavaBuild Path, clique em Add JARs ou Add External JARs
    :



    Para acessar os dados usamos o padrão DAO, assim encapsulamos todo o trabalho com o banco, e nossas classes que querer usar e manipular os dados simplesmente devem conhecer nossa classe DAO, sem se preocupar com abrir conexão, fechar e inserir comandos.
    Olhem nossa classe de acesso, percebam que ela permite todas operações com a tabela Pessoa(Está no pacote dao):

    Eu, particularmente, costumo criar classes que herdam de um pai(ou implementam uma interface) DAO, para evitar repetir código, mas como temos somente uma tabela(entidade para alguns) iremos usar esse DAO específico, o DaoPessoa.

    Quanto ao código não temos segredo. Primeiro conectamos, com nossa conexão criamos um comando. Depois do comando enviamos uma String que corresponde ao comando de banco de dados(como o DELETE, INSERT, SELECT e UPDATE). Perceba que para cada comando tem um tratamento de exceção, assim identificamos o erro "na lata"!

    Os nossos métodos de busca retornam um Vector de pessoas, poderíamos utilizar outra estutura de armazenamento múltiplo(Collection), como o ArrayList...

    Para mostrar o erro usamos um método, assim encapsulamos como o erro será exibido(pois podemos não querer sair do programa, ou exibir o erro no console ou uma janela de diálogo...), sem problemas!

    Agora chegou a hora mais interessante, vamos testar o que fizemos até agora:


    Nada demais neste teste, estamos inserindo uma pessoa, depois buscando para ver se ela foi inserida mesmo! Em seguida atualizamos o nome e buscamos para ver se aconteceu a atualização, por fim apagamos a pessoa e tentamos realizar a busca para ter certeza que nosso dado foi apagado mesmo!
    Ao rodar essa classe você deve obter o seguinte resultado no console:


    Conectado!
    Inserida!
    Conexão Fechada
    Conectado!
    Pessoa Encontrada: José da Silva
    Conectado!
    Atualizada!
    Conexão Fechada
    Conectado!
    Pessoa Encontrada: José da Silva Sauro
    Conectado!
    Conexão Fechada
    Conectado!
    Pessoa foi apagada com sucesso



    Se você não conseguiu, volte e tente fazer tudo desde o começo!

    Chegamos ao fim desse primeiro tutorial, nossas classes ficaram como mostrado abaixo:








    Não percam a segunda parte, onde mostraremos uma segunda forma de realizar essas mesmas funcionalidade, demonstrando problemas e erros futuros que essa parte poderia apresentar
    (Obrigado a todos que opinaram e as grandes críticas construtivas)





    Quem quiser terminar o que foi implementado até agora e mostrar para o pessoal, fique a vontade! Mostre suas habilidades em alguma das tecnologias abaixo, usando esse DAO:

    -Java Swing
    -JSP
    -JavaFX
    -WebServices(Oferecer o acesso como um serviço)
    -Uso com algum FrameWork(Struts, JSF...)
    -Outros...

    A idéia é demonstrar diversas tecnologias com esse exemplo simples, assim teremos "um pontapé" para aprendizado.


    Artigos desta série:
    Acessando dados com Java: 1º parte - Simples Dao
    Acessando Dados com Java: Parte 2 - Prevendo problemas
    Acessando Dados com Java: Parte 3 - Hibernate Annotations




    Leia também:
    Acessando Banco de Dados em Java (PARTE 1)
    Acessando Banco de Dados em Java (PARTE 2)
    Acessando Banco de Dados em Java (PARTE 3)



    Quer aprender mais sobre Java?
    O que é Java?
    Características Básicas
    Orientação a Objetos



    Tutoriais para Certificação Java
    Fundamentos da Linguagem
    Modificadores
    Operadores e atribuições
    Controle de Fluxo
    Orientação a Objetos
    Java Lang e Wrappers
    Objetos e Conjuntos
    Classes Internas
    Threads (Segmentos)



    _________________
    William Antônio Siqueira
    Siga-me no Twitter - Tudo sobre JavaFX e um pouco mais
    Veja meu Blog
    Aprendendo JavaFX




  1. treloso
    Posts:46


    Comment Arrow

    Publicado em: 14/07/2009 19:08:17

    Parabéns jesuino, tutorial bastante ilustrado, fácil de entender e muito útil!!!


    Continue assim! Abração cara.
    _________________




  1. jesuino
    Posts:1953


    Comment Arrow

    Publicado em: 13/07/2009 13:16:41

    Obrigado Treloso, digo o mesmo dos seus tutorias!

    Assim vamos indo!

    []'s
    _________________
    William Antônio Siqueira
    Siga-me no Twitter - Tudo sobre JavaFX e um pouco mais
    Veja meu Blog
    Aprendendo JavaFX




  1. loverboy
    Posts:7


    Comment Arrow

    Publicado em: 26/11/2009 09:46:50

    Muito bom cara funciona mesmo,não se acha facil um DAO simples assim.vlw abraço, as primeirtas vezes que compilei pensei que não fazia nada, pois ele insere, atualiza, e depois deleta.




  1. rafarepy
    Posts:16


    Comment Arrow

    Publicado em: 27/07/2011 09:37:52

    Cara Parabens pelo teu trabalho muito bom mesmo...Explicou de uma forma muito simples e eficiente, deu de Dez a muitos professores que falaum bonito um monte de coisas mais voce nao entende nada, muito eficiente e pratica a tua explicacao...!!!

    E acredito que esta perfeito finalmente entendi bem o Dao..!!1
    VAleu mesmo...!!!


  1. Comment Arrow

    Publicado em: 02/08/2011 12:38:31

    Boa tarde

    Vou tentar implementar esse seu projeto em um Swing, via Web eu já fiz um projeto para uma empresa mais tenho muita dificuldade com Swing.

    Alguém tentou algo?
    _________________
    Gilmar Soares
    Analista de Projetos II




  1. Fabio-gyn
    Posts:1


    Comment Arrow

    Publicado em: 01/05/2012 15:20:17

    Boa tarde, sou novato em Java e peço desculpas caso minha dúvida seja muito óbvia.

    bom, qual a função do 4º parâmetro/argumento (int banco)no método Conncetion conexao, da Classe ConFactory?

    e por que deve ser int?




  1. simu
    Posts:9416


    Comment Arrow

    Publicado em: 02/05/2012 08:42:45

    Fabio-gyn
    Boa tarde, sou novato em Java e peço desculpas caso minha dúvida seja muito óbvia.

    bom, qual a função do 4º parâmetro/argumento (int banco)no método Conncetion conexao, da Classe ConFactory?

    e por que deve ser int?



    O quarto parâmetro serve para selecionar o banco de dados usado.
    No tutorial apenas o MySQL foi implementado, portanto o único valor válido é a constante ConFactory.MYSQL (valor zero):

    Na verdade essa não é a única solução:
    - o mais fácil é carregar todos os drivers, o URL diz qual o banco a usar; ou
    - na hora de executar, é possível indicar qual os drivers a carregar (propriedade do sistema: jdbc.drivers); ou
    - dentro do META-INF do JAR
    _________________
      Nome real: Carlos F. Heuberger

    Removeram os meus direitos de administrador e moderador - sem aviso, pela segunda vez - contate o ombudsman (?), a equipejavafree ou a "alta gerência" se necessário - Que pena... que terminou dessa maneira!

    "The mod javafree deserves, but not the one it needs right now."
    --------------------
    Não leio nem respondo MPs!
    This posting is provided AS IS with no warranties and confers no rights.




  1. Relacionados





Novo tópico   Responder tópico     Índice do forum -> [Tutoriais] - Banco de Dados