Sie sind auf Seite 1von 8

Acessando dados com Java: 1 parte - Simples Dao - Java Free.

org

1 de 8

Assine 0800 703 3000 SAC Bate -papo

http://javafree.uol.com.br/artigo/874102/Acessando-dados-com-Java-1-p...

E-m ail Notcias Es porte Entre te nim e nto M ulhe r Shopping

Login

HOME

NOTCIAS

ARTIGOS

FRUM

BUSCA

BUSCAR

Registre-se

ENVIAR NOTCIA

CONTRIBUIR
Curtir

2,9 mil

138

Seguir @javafree

Home > Artigos > Banco de Dados >

Acessando dados com Java: 1 parte - Simples Dao


Publicado por jesuino em 02/05/2012 - 419.573 v isualizaes
9

Like

12

comentrios: 7
Leia 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 div ersas tecnologias.
A ssim, podemos ter um repositrio de tutorias sobre as mais div ersas A PI's, tecnologias e framework s que esto no mundo Jav a com um exemplo simples e
de 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 classes
demonstradas 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.
F uturamente, pretendemos usar essas mesmas classes com Jav a 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, e
quebramos alguns padres, como exibio de mensagem ser da responsabilidade da v iew. A ssim, na segunda parte iremos mostrar como deixar o acesso mais
limpo e flexv el, eliminando muitos pontos fracos do cdigo!
Sem papo, o aplicativo
Primeiro v amos definir o que iremos tratar, que tal uma pessoa? O k , pessoa!!
Nossa pessoa precisa se identificar, RG! Mas v oc no chama as pessoas pelo RG, ento colocaremos o nome da pessoa tambm e mais estado, cidade, idade e
s.
Toda tabela precisa de um identificador nico que chamamos de chav e primria, ou seja, algo que diferencie uma tabela das outras. No caso da pessoa, a
chav e o RG.
A gora v amos criar isso no banco de dados, estamos usando My Sql.
Dv idas com a instalao do My SQ L?
C riamos um database com o nome "jav afx_crud"(v oc 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)... :S


Rodando o Script v oc ter sua tabela no banco de dados fisicamente.

Sugesto: Usem My Sql e My Sql - Front

19/04/2015 16:43

Acessando dados com Java: 1 parte - Simples Dao - Java Free.org

2 de 8

http://javafree.uol.com.br/artigo/874102/Acessando-dados-com-Java-1-p...

Para salv ar os dados v oc 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 no usual, o interessante ter um aplicativ o que faz isso, acessa o banco e permite as funcionalidades, sem o usurio conhecer o banco de dados.
Em Jav a, como em qualquer outra linguagem(exceto algumas especficas, como A BA P, mas isso j so outros 500), v oc tem que se conectar ao banco de
dados para realizar aes com os dados. Dependendo do banco que v oc utiliza, existe um .jar que permite o acesso.

O JA R para o My SQ L est anexo!


Q uanto a manipulao, v oc pode usar um framework (ex: Hibernate, neste caso at a conexo) de persistncia ou a soluo nativ a de jav a JDBC . JDBC
menos flexv el que um framework , mas mais simples para nosso projetinho, v amos usar JDBC !
C rie um projeto Jav a no eclipse , chame como quiser :), depois comece a codificao!
Hora de cdigo
O comum em Jav a criarmos classes Pojo, classes que so semelhantes a tabelas do banco, assim podemos manipular de forma igual para igual ao que est
no 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;
}

19/04/2015 16:43

Acessando dados com Java: 1 parte - Simples Dao - Java Free.org

3 de 8

http://javafree.uol.com.br/artigo/874102/Acessando-dados-com-Java-1-p...

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 priv ados.
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 um
pacote e coloque esse cdigo em um arquiv o .jav a l.
importante a div iso de papis: quem Model, C ontrol e View, assim podemos usar o que for definido hoje nos projetos futuros.
A gora v amos 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 F actory que usamos em um projeto muito antigo, mas
serv e para esse da mesma forma. O beserv e que para outros bancos de dados v oc dev e alterar a fbrica, essa s tem a parte do My Sql.
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 Jav aBuild Path, clique em A dd JA Rs ou A dd
External JA Rs:

19/04/2015 16:43

Acessando dados com Java: 1 parte - Simples Dao - Java Free.org

4 de 8

http://javafree.uol.com.br/artigo/874102/Acessando-dados-com-Java-1-p...

Para acessar os dados usamos o padro DA O , assim encapsulamos todo o trabalho com o banco, e nossas classes que querer usar e manipular os dados
simplesmente dev em conhecer nossa classe DA O , 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
import
import
import
import

java.sql.Connection;
java.sql.ResultSet;
java.sql.SQLException;
java.sql.Statement;
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<Pessoa> buscarTodos() {
conectar();
Vector<Pessoa> resultados = new Vector<Pessoa>();
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<Pessoa> buscar(String rg) {
conectar();
Vector<Pessoa> resultados = new Vector<Pessoa>();
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"));

19/04/2015 16:43

Acessando dados com Java: 1 parte - Simples Dao - Java Free.org

5 de 8

http://javafree.uol.com.br/artigo/874102/Acessando-dados-com-Java-1-p...

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) DA O , para ev itar repetir cdigo, mas como temos somente
uma tabela(entidade para alguns) iremos usar esse DA O especfico, o DaoPessoa.
Q uanto ao cdigo no temos segredo. Primeiro conectamos, com nossa conexo criamos um comando. Depois do comando env iamos uma String que
corresponde ao comando de banco de dados(como o DELETE, INSERT, SELEC T e UPDA TE). Perceba que para cada comando tem um tratamento de
exceo, assim identificamos o erro "na lata"!
O s nossos mtodos de busca retornam um Vector de pessoas, poderamos utilizar outra estutura de armazenamento mltiplo( C ollection), como o A rray List...
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 no
console ou uma janela de dilogo...), sem problemas!
A gora chegou a hora mais interessante, v amos 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);

19/04/2015 16:43

Acessando dados com Java: 1 parte - Simples Dao - Java Free.org

6 de 8

http://javafree.uol.com.br/artigo/874102/Acessando-dados-com-Java-1-p...

Vector<Pessoa> resultado = daoPessoa.buscar("12345678X");


for (Iterator<Pessoa> 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<Pessoa> 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 v er se ela foi inserida mesmo! Em seguida atualizamos o nome e buscamos para
v er se aconteceu a atualizao, por fim apagamos a pessoa e tentamos realizar a busca para ter certeza que nosso dado foi apagado mesmo!
A o rodar essa classe v oc dev e obter o seguinte resultado no console:
Quote:
C onectado!
Inserida!
C onexo F echada
C onectado!
Pessoa Encontrada: Jos da Silv a
C onectado!
A tualizada!
C onexo F echada
C onectado!
Pessoa Encontrada: Jos da Silv a Sauro
C onectado!
C onexo F echada
C onectado!
Pessoa foi apagada com sucesso

Se v oc no conseguiu, v olte e tente fazer tudo desde o comeo!


C hegamos 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)

19/04/2015 16:43

Acessando dados com Java: 1 parte - Simples Dao - Java Free.org

7 de 8

http://javafree.uol.com.br/artigo/874102/Acessando-dados-com-Java-1-p...

Q uem quiser terminar o que foi implementado at agora e mostrar para o pessoal, fique a v ontade! Mostre suas habilidades em alguma das tecnologias abaixo,
usando esse DA O :
-Jav a Swing
-JSP
-Jav aF X
-W ebServ ices(O ferecer o acesso como um serv io)
-Uso com algum F rameW ork (Struts, JSF ...)
-O utros...
A idia demonstrar div ersas tecnologias com esse exemplo simples, assim teremos "um pontap" para aprendizado.

A rtigos desta srie:


A cessando dados com Jav a: 1 parte - Simples Dao
A cessando Dados com Jav a: Parte 2 - Prev endo problemas
A cessando Dados com Jav a: Parte 3 - Hibernate A nnotations

Leia tambm:
A cessando Banco de Dados em Jav a (PA RTE 1)
A cessando Banco de Dados em Jav a (PA RTE 2)
A cessando Banco de Dados em Jav a (PA RTE 3)

Quer aprender mais sobre Java?


O que Jav a?
C aractersticas Bsicas
O rientao a O bjetos

T utoriais para Certificao Java


F undamentos da Linguagem
Modificadores
O peradores e atribuies
C ontrole de F luxo
O rientao a O bjetos
Jav a Lang e W rappers
O bjetos e C onjuntos
C lasses Internas
Threads (Segmentos)

Baixar:
Tamanho:

connector-java-5.0.8-bin.jar
528 KB

Baixar:
Tamanho:

crud projeto eclipse.jpg


9 KB

Baixar:
Tamanho:

Incluir jar.jpg
101 KB

Baixar:
Tamanho:

sqlfront e tabela.jpg
26 KB

comentrios: 7

Tpicos Relacionados
JSF pginas com acesso ao BD para de funcionar aps algum tempo
A juda com Padro MVC
Demora 4 segundos para aparecer a tela da O rdem de Serv io
Exerccios Resolv idos em JA VA O O Iniciante
Duv ida Inicio de F ormaao
JA VA W EB C O M BIO METRIC O
A ltera JLabel de outra classe

19/04/2015 16:43

Acessando dados com Java: 1 parte - Simples Dao - Java Free.org

8 de 8

http://javafree.uol.com.br/artigo/874102/Acessando-dados-com-Java-1-p...

[Hibernate] DA O automatizado
C onsulta em Banco de Dados Q ue Depende do Resultado de uma C onsulta A nterior
No C onsegue A cessar O Banco De Dados My SQ L A credito !!!
Preenchimento de C ampo de Texto
Duv ida com listas Jav a
C omo criar os C ontrollers ?
Locadora em jav a
Problemas com execuo de aplicativ o
A cesso Remoto de Banco de Dados PostgreSQ L
A juda Jav a + My SQ L
PRO BLEMA NA INSERC A O DE DA DO S NO MYSQ L JA VA [RESO LVIDO ]
Programa de av aliao de professores
v etor
Usar banco em jav a j estando conectado
A juda com trabalho de Jav a com manipulao de arquiv os
Banco de Dados PostgreSQ L com a opo -i
A tualizar jTable
[RESO LVIDO ] W eb Serv ice no executa

H ome

Sobr e

A nuncie

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

RSS Notcias
RSS F r um

19/04/2015 16:43

Das könnte Ihnen auch gefallen