Download - Simples Dao

Transcript
  • Assine 0800 703 3000 SAC Bate-papo E-mail Notcias Esporte Entretenimento Mulher Shopping BUSCAR

    Login Registre-se

    2,9 milCurtirCurtir 138 Seguir Seguir @javafree@javafree

    Home > Artigos > Banco de Dados >

    Acessando dados com Java: 1 parte - Simples DaoPublicado por jesuino em 02/05/2012 - 419.573 v isualizaes

    comentrios: 7Leia a parte 2 deste artigo.Esse tutorial pretende mostrar como operaes como busca, deleo, atualizao e insero de dados no banco podem ser feitas com diversas tecnologias.Assim, podemos ter um repositrio de tutorias sobre as mais diversas API's, tecnologias e frameworks que esto no mundo Java com um exemplo simples ede fcil entendimento.Embora aqui no frum tenhamos muitos tutoriais com acesso a banco de dados, esse pretende ser um pouco diferente, pois iremos utilizar as classesdemonstradas hoje para construir outras partes em outras tecnologias.Primeiramente parte iremos abordar somente o banco de dados e a manipulao 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 prticas e uso de alguns comandos um pouco mais complexos, equebramos alguns padres, como exibio de mensagem ser da responsabilidade da v iew. Assim, na segunda parte iremos mostrar como deixar o acesso maislimpo e flexvel, eliminando muitos pontos fracos do cdigo!Sem papo, o aplicativoPrimeiro vamos definir o que iremos tratar, que tal uma pessoa? Ok , pessoa!!Nossa pessoa precisa se identificar, RG! Mas voc no chama as pessoas pelo RG, ento colocaremos o nome da pessoa tambm e mais estado, cidade, idade es.Toda tabela precisa de um identificador nico que chamamos de chave primria, ou seja, algo que diferencie uma tabela das outras. No caso da pessoa, achave o RG.Agora vamos criar isso no banco de dados, estamos usando MySql.Dv idas com a instalao do MySQL?Criamos um database com o nome "javafx_crud"(voc pode criar com o nome que quiser), o script para a criao da tabela ficou assim:use javafx_crud; create table pessoa( rg varchar(20) not null, nome varchar(20) not null, idade int(2) not null, cidade varchar(20) not null, estado varchar(2) not null, primary key(rg) );

    No estamos usando trigramao, afinal temos somente uma entidade(tabela)... :SRodando o Script voc ter sua tabela no banco de dados fisicamente.Sugesto: Usem MySql e MySql - Front

    HOME NOTCIAS ARTIGOS FRUM BUSCA ENVIAR NOTCIA CONTRIBUIR

    2 12LikeLike9

    Acessando dados com Java: 1 parte - Simples Dao - Java Free.org http://javafree.uol.com.br/artigo/874102/Acessando-dados-com-Java-1-p...

    1 de 8 19/04/2015 16:43

  • 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 obanco) oferecem.Mas isso no usual, o interessante ter um aplicativo que faz isso, acessa o banco e permite as funcionalidades, sem o usurio conhecer o banco de dados.Em Java, como em qualquer outra linguagem(exceto algumas especficas, como ABAP, mas isso j so outros 500), voc tem que se conectar ao banco dedados para realizar aes 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 manipulao, voc pode usar um framework(ex: Hibernate, neste caso at a conexo) de persistncia ou a soluo nativa de java JDBC. JDBC menos flexvel que um framework , mas mais simples para nosso projetinho, vamos usar JDBC!Crie um projeto Java no eclipse , chame como quiser :), depois comece a codificao!Hora de cdigoO comum em Java criarmos classes Pojo, classes que so semelhantes a tabelas do banco, assim podemos manipular de forma igual para igual ao que estno banco. Nossa classe pessoa:package model; public class Pessoa { private String rg; private String nome; private int idade; private String estado; private String cidade; public void setRg(String rg) { this.rg = rg; } public void setNome(String nome) { this.nome = nome; } public void setIdade(int idade) { this.idade = idade; } public void setEstado(String estado) { this.estado = estado; } public void setCidade(String cidade) { this.cidade = cidade; } public String getRg() { return this.rg; } public String getNome() { return this.nome; } public int getIdade() { return this.idade; } public String getEstado() { return this.estado; }

    Acessando dados com Java: 1 parte - Simples Dao - Java Free.org http://javafree.uol.com.br/artigo/874102/Acessando-dados-com-Java-1-p...

    2 de 8 19/04/2015 16:43

  • public String getCidade() { return this.cidade; } }

    C laro, todos os atributos esto encapsulados, nunca use atributo pblico, use sempre mtodos 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 div idir nosso projeto melhor) model, ento crie umpacote e coloque esse cdigo em um arquivo .java l. importante a div iso de papis: 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 conexo temos uma classe que faz a funo de fbrica de conexes. Isso mesmo, o padro Factory que usamos em um projeto muito antigo, masserve para esse da mesma forma. Obeserve que para outros bancos de dados voc deve alterar a fbrica, essa s tem a parte do MySql.Essa classe foi alocada no pacote "banco", ento no perca tempo e crie o pacote "banco"(que estar em outro pacote futuramente, o dao).package dao.banco; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class ConFactory { public static final int MYSQL = 0; private static final String MySQLDriver = "com.mysql.jdbc.Driver"; public static Connection conexao(String url, String nome, String senha, int banco) throws ClassNotFoundException, SQLException { switch (banco) { case MYSQL: Class.forName(MySQLDriver); break; } return DriverManager.getConnection(url, nome, senha); } }

    Perceba que a classe lana um exceo quando algo da errado na conexo com o banco, e muita coisa pode dar errado!

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

    C lique com o boto direito em cima do seu projeto, escolha propriedade. Na janela propriedades, escolha JavaBuild Path, clique em Add JARs ou AddExternal JARs:

    Acessando dados com Java: 1 parte - Simples Dao - Java Free.org http://javafree.uol.com.br/artigo/874102/Acessando-dados-com-Java-1-p...

    3 de 8 19/04/2015 16:43

  • Para acessar os dados usamos o padro DAO, assim encapsulamos todo o trabalho com o banco, e nossas classes que querer usar e manipular os dadossimplesmente devem conhecer nossa classe DAO, sem se preocupar com abrir conexo, fechar e inserir comandos.O lhem nossa classe de acesso, percebam que ela permite todas operaes com a tabela Pessoa(Est no pacote dao):package dao; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Vector; import javax.swing.JOptionPane; import model.Pessoa; import dao.banco.ConFactory; public class DaoPessoa { // Configura essas variveis de acordo com o seu banco private final String URL = "jdbc:mysql://localhost/javafx_crud", NOME = "root", SENHA = "senha"; private Connection con; private Statement comando; public void apagar(String rg) { conectar(); try { comando .executeUpdate("DELETE FROM pessoa WHERE rg = '" + rg + "';"); } catch (SQLException e) { imprimeErro("Erro ao apagar pessoas", e.getMessage()); } finally { fechar(); } } public Vector buscarTodos() { conectar(); Vector resultados = new Vector(); ResultSet rs; try { rs = comando.executeQuery("SELECT * FROM pessoa"); while (rs.next()) { Pessoa temp = new Pessoa(); // pega todos os atributos da pessoa temp.setRg(rs.getString("rg")); temp.setNome(rs.getString("nome")); temp.setIdade(rs.getInt("idade")); temp.setCidade(rs.getString("cidade")); temp.setEstado(rs.getString("estado")); resultados.add(temp); } return resultados; } catch (SQLException e) { imprimeErro("Erro ao buscar pessoas", e.getMessage()); return null; } } public void atualizar(Pessoa pessoa) { conectar(); String com = "UPDATE pessoa SET nome = '" + pessoa.getNome() + "', idade =" + pessoa.getIdade() + ", cidade = '" + pessoa.getCidade() + "', estado ='" + pessoa.getEstado() + "' WHERE rg = '" + pessoa.getRg() + "';"; System.out.println("Atualizada!"); try { comando.executeUpdate(com); } catch (SQLException e) { e.printStackTrace(); } finally { fechar(); } } public Vector buscar(String rg) { conectar(); Vector resultados = new Vector(); ResultSet rs; try { rs = comando.executeQuery("SELECT * FROM pessoa WHERE rg LIKE '" + rg + "%';"); while (rs.next()) { Pessoa temp = new Pessoa(); // pega todos os atributos da pessoa temp.setRg(rs.getString("rg")); temp.setNome(rs.getString("nome")); temp.setIdade(rs.getInt("idade")); temp.setCidade(rs.getString("cidade"));

    Acessando dados com Java: 1 parte - Simples Dao - Java Free.org http://javafree.uol.com.br/artigo/874102/Acessando-dados-com-Java-1-p...

    4 de 8 19/04/2015 16:43

  • temp.setEstado(rs.getString("estado")); resultados.add(temp); } return resultados; } catch (SQLException e) { imprimeErro("Erro ao buscar pessoa", e.getMessage()); return null; } } public void insere(Pessoa pessoa){ conectar(); try { comando.executeUpdate("INSERT INTO Pessoa VALUES('" + pessoa.getRg() + "', '" + pessoa.getNome() + "'," + pessoa.getIdade() + ",'" + pessoa.getCidade() + "','" + pessoa.getEstado() + "')"); System.out.println("Inserida!"); } catch (SQLException e) { imprimeErro("Erro ao inserir Pessoa", e.getMessage()); } finally { fechar(); } } private void conectar() { try { con = ConFactory.conexao(URL, NOME, SENHA, ConFactory.MYSQL); comando = con.createStatement(); System.out.println("Conectado!"); } catch (ClassNotFoundException e) { imprimeErro("Erro ao carregar o driver", e.getMessage()); } catch (SQLException e) { imprimeErro("Erro ao conectar", e.getMessage()); } } private void fechar() { try { comando.close(); con.close(); System.out.println("Conexo Fechada"); } catch (SQLException e) { imprimeErro("Erro ao fechar conexo", e.getMessage()); } } private void imprimeErro(String msg, String msgErro) { JOptionPane.showMessageDialog(null, msg, "Erro crtico", 0); System.err.println(msg); System.out.println(msgErro); System.exit(0); } }

    Eu, particularmente, costumo criar classes que herdam de um pai(ou implementam uma interface) DAO, para ev itar repetir cdigo, mas como temos somenteuma tabela(entidade para alguns) iremos usar esse DAO especfico, o DaoPessoa.Quanto ao cdigo no temos segredo. Primeiro conectamos, com nossa conexo criamos um comando. Depois do comando env iamos uma String quecorresponde ao comando de banco de dados(como o DELETE, INSERT, SELECT e UPDATE). Perceba que para cada comando tem um tratamento deexceo, assim identificamos o erro "na lata"!Os nossos mtodos de busca retornam um Vector de pessoas, poderamos utilizar outra estutura de armazenamento mltiplo(Collection), como o ArrayList...Para mostrar o erro usamos um mtodo, assim encapsulamos como o erro ser exibido(pois podemos no querer sair do programa, ou exibir o erro noconsole ou uma janela de dilogo...), sem problemas!Agora chegou a hora mais interessante, vamos testar o que fizemos at agora:

    import java.util.Iterator; import java.util.Vector; import model.Pessoa; import dao.DaoPessoa; public class Teste { public static void main(String[] args) { Pessoa pessoa = new Pessoa(); DaoPessoa daoPessoa = new DaoPessoa(); pessoa.setNome("Jos da Silva"); pessoa.setRg("12345678X"); pessoa.setIdade(20); pessoa.setEstado("SP"); pessoa.setCidade("So Paulo"); daoPessoa.insere(pessoa);

    Acessando dados com Java: 1 parte - Simples Dao - Java Free.org http://javafree.uol.com.br/artigo/874102/Acessando-dados-com-Java-1-p...

    5 de 8 19/04/2015 16:43

  • Vector resultado = daoPessoa.buscar("12345678X"); for (Iterator iterator = resultado.iterator(); iterator .hasNext();) { Pessoa p = iterator.next(); System.out.println("Pessoa Encontrada: " + p.getNome()); } pessoa.setNome("Jos da Silva Sauro"); daoPessoa.atualizar(pessoa); resultado = daoPessoa.buscar("12345678X"); for (Iterator iterator = resultado.iterator(); iterator .hasNext();) { Pessoa p = iterator.next(); System.out.println("Pessoa Encontrada: " + p.getNome()); } daoPessoa.apagar("12345678X"); resultado = daoPessoa.buscar("12345678X"); if (resultado.size() == 0) { System.out.println("Pessoa foi apagada com sucesso"); } else { System.out.println("A pessoa permanece no banco de dados"); } } }

    Nada demais neste teste, estamos inserindo uma pessoa, depois buscando para ver se ela foi inserida mesmo! Em seguida atualizamos o nome e buscamos paraver se aconteceu a atualizao, 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:

    Quote:Conectado!Inserida!Conexo FechadaConectado!Pessoa Encontrada: Jos da SilvaConectado!A tualizada!Conexo FechadaConectado!Pessoa Encontrada: Jos da Silva SauroConectado!Conexo FechadaConectado!Pessoa foi apagada com sucesso

    Se voc no conseguiu, volte e tente fazer tudo desde o comeo!Chegamos ao fim desse primeiro tutorial, nossas classes ficaram como mostrado abaixo:

    No 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 crticas construtivas)

    Acessando dados com Java: 1 parte - Simples Dao - Java Free.org http://javafree.uol.com.br/artigo/874102/Acessando-dados-com-Java-1-p...

    6 de 8 19/04/2015 16:43

  • comentrios: 7

    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-WebServ ices(Oferecer o acesso como um serv io)-Uso com algum FrameWork(Struts, JSF...)-Outros...A idia demonstrar diversas tecnologias com esse exemplo simples, assim teremos "um pontap" para aprendizado.

    A rtigos desta srie:Acessando dados com Java: 1 parte - Simples DaoAcessando Dados com Java: Parte 2 - Prevendo problemasAcessando Dados com Java: Parte 3 - Hibernate Annotations

    Leia tambm: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?Caractersticas BsicasOrientao a Objetos

    Tutoriais para Certificao JavaFundamentos da LinguagemModificadoresOperadores e atribuiesControle de F luxoOrientao a ObjetosJava Lang e WrappersObjetos e ConjuntosC lasses InternasThreads (Segmentos)

    Baixar: connector-java-5.0.8-bin.jarTamanho: 528 KB

    Baixar: crud projeto eclipse.jpgTamanho: 9 KB

    Baixar: Incluir jar.jpgTamanho: 101 KB

    Baixar: sqlfront e tabela.jpgTamanho: 26 KB

    Tpicos RelacionadosJSF pginas com acesso ao BD para de funcionar aps algum tempo A juda com Padro MVC Demora 4 segundos para aparecer a tela da Ordem de Serv io Exerccios Resolv idos em JAVA OO Iniciante Duv ida Inicio de Formaao JAVA WEB COM BIOMETRICO A ltera JLabel de outra classe

    Acessando dados com Java: 1 parte - Simples Dao - Java Free.org http://javafree.uol.com.br/artigo/874102/Acessando-dados-com-Java-1-p...

    7 de 8 19/04/2015 16:43

  • [Hibernate] DAO automatizado Consulta em Banco de Dados Que Depende do Resultado de uma Consulta Anterior No Consegue Acessar O Banco De Dados MySQL Acredito !!! Preenchimento de Campo de Texto Duv ida com listas Java Como criar os Controllers ? Locadora em java Problemas com execuo de aplicativo Acesso Remoto de Banco de Dados PostgreSQL A juda Java + MySQL PROBLEMA NA INSERCAO DE DADOS NO MYSQL JAVA [RESOLVIDO] Programa de avaliao de professoresvetor Usar banco em java j estando conectado A juda com trabalho de Java com manipulao de arquivos Banco de Dados PostgreSQL com a opo -i A tualizar jTable [RESOLVIDO] Web Serv ice no executa

    RSS NotciasRSS Frum

    H ome Sobre A nuncieO Jav aF ree.org uma comunidade jav a formada pela coolaborao dos desenv olv edores da tecnologiajav a. A publicao de artigos alm de ajudar a comunidade jav a, ajuda a dar maior v isibilidade para o autor.C ontribua conosco.

    Acessando dados com Java: 1 parte - Simples Dao - Java Free.org http://javafree.uol.com.br/artigo/874102/Acessando-dados-com-Java-1-p...

    8 de 8 19/04/2015 16:43


Top Related