simples dao

8
Assine 0800 703 3000 SAC Bate-papo E-m ail Notícias Esporte Entretenimento Mulher Shopping BUSCAR Login Registre-se 2,9 mi Curtir Curtir 138 Seguir Seguir @javafree @javafree Home > Artigos > Banco de Dados > Acessando dados com Java: 1º parte - Simples Dao Publicado por jesuino em 02/05/2012 - 419.573 v isualizações comentários: 7 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: 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) ); Não estamos usando trigramação, afinal temos somente uma entidade(tabela)... :S Rodando o Script você terá sua tabela no banco de dados fisicamente. Sugestão: Usem MySql e MySql - Front HOME NOTÍCIAS ARTIGOS FÓRUM BUSCA ENVIAR NOTÍCIA CONTRIBUIR 2 12 Like Like 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

Upload: dionisio-torres

Post on 29-Sep-2015

212 views

Category:

Documents


0 download

DESCRIPTION

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