Dao

5 respostas
R

Amigos… alguém teria alguma coisa sobre DAO… um tutorial, exemplo bem basico que faca o acesso a Banco Dados… pra mim poder entender como funciona…

Quanto mais simples melhor pra entender… algo tipo… uma classe pessoa q tenha codigo, nome, telefone.

Obrigado

5 Respostas

A

Bean:

package br.com.caelum.jdbc.modelo;
public class Contato {
	/**
	 * @return Returns the email.
	 */
	public String getEmail() {
		return email;
	}
	/**
	 * @param email The email to set.
	 */
	public void setEmail(String email) {
		this.email = email;
	}
	/**
	 * @return Returns the endereco.
	 */
	public String getEndereco() {
		return endereco;
	}
	/**
	 * @param endereco The endereco to set.
	 */
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}
	/**
	 * @return Returns the nome.
	 */
	public String getNome() {
		return nome;
	}
	/**
	 * @param nome The nome to set.
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}

        /**
         * @return Returns the id.
         */
        public Long getId() {
                return id;
        }
        /**
         * @param id The id to set.
         */
        public void setId(Long id) {
                this.id = id;
        }


	private String nome;
	private String email;
	private String endereco;
	private Long id;
}

ContatoDao:

package br.com.caelum.jdbc.dao;

import br.com.caelum.jdbc.*;
import br.com.caelum.jdbc.modelo.*;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class ContatoDAO {

	// a conexão com o banco de dados
	private Connection connection;

	// construtor que recebe a conexão
	public ContatoDAO(Connection con) {
		this.connection = con;
	}

	public ContatoDAO() throws SQLException {
		this.connection = ConnectionFactory.getConnection();
	}

	public void adiciona(Contato contato) throws SQLException {

		// prepared statement para inserção
		PreparedStatement stmt = this.connection
				.prepareStatement("insert into contatos (nome,email,endereco) values (?, ?, ?)");

		// seta os valores
		stmt.setString(1, contato.getNome());
		stmt.setString(2, contato.getEmail());
		stmt.setString(3, contato.getEndereco());

		// executa
		stmt.execute();
		stmt.close();
	}

	public List<Contato> getLista() throws SQLException {

		PreparedStatement stmt = this.connection.prepareStatement("select * from contatos");
		ResultSet rs = stmt.executeQuery();

		List<Contato> list = new ArrayList<Contato>();
		while (rs.next()) {
			// criando o objeto Contato 
			Contato contato = new Contato();
			contato.setId(rs.getLong("id"));
			contato.setNome(rs.getString("nome"));
			contato.setEmail(rs.getString("email"));
			contato.setEndereco(rs.getString("endereco"));

			// adicionando o objeto à lista
			list.add(contato);
		}

		rs.close();
		stmt.close();

		return list;
	}

	public void altera(Contato contato) throws SQLException {
		PreparedStatement stmt = connection.prepareStatement("update contatos set nome=?, email=?, endereco=? where id=?");
		stmt.setString(1, contato.getNome());
		stmt.setString(2, contato.getEmail());
		stmt.setString(3, contato.getEndereco());
		stmt.setLong(4, contato.getId());
		stmt.execute();
		stmt.close();
	} 

	public void remove(Contato contato) throws SQLException {
		PreparedStatement stmt = connection.prepareStatement("delete from contatos where id=?");
		stmt.setLong(1, contato.getId());
		stmt.execute();
		System.out.println("Contato "+contato.getId()+" removido");
		stmt.close();
	} 

	public Contato procura(Long id) throws SQLException {
		PreparedStatement stmt = connection.prepareStatement("select * from contatos where id=?");
		ResultSet rs = stmt.executeQuery();
		
		if(!rs.next()) return null;

		Contato c = new Contato();
		c.setId(rs.getLong("id"));
		c.setNome(rs.getString("nome"));
		c.setEmail(rs.getString("email"));
		c.setEndereco(rs.getString("endereco"));
		rs.close();
		stmt.close();
		return c; 
	}
}

Espero ter ajudado
Falou

Rafael_Nunes

http://www.guj.com.br/posts/list/23944.java
http://www.guj.com.br/jforum.java?module=search&action=search&clean=1&search_keywords=DAO&search_terms=all&search_forum=&sort_by=time&sort_dir=DESC&search_cat=
http://www.google.com.br/search?q=data+access+object&sourceid=mozilla-search&start=0&start=0&ie=utf-8&oe=utf-8&client=firefox-a&rls=org.mozilla:en-US:official
http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html

R

Obrigado pelo exemplo…

Entendi o objetivo inicial… mas tem um detalhe neste modelo…

1- Se eu quiser apenas um campo de retorno… tipo apenas o nome. Vou ter q fazer um metodo especifico de captura de apenas um campo?

2- De um exemplo bem basico de uma regra de negocio para o campo codigo… tipo ele não pode ser null… onde faco isso

A

Se vc quiser que venha só o nome, vc pode passar sua consulta como parametro tambem, aí ao invés de listar tudo só lista o que vc quer

jason_bourne

Na hora de chamar o DAO e listar, como eu faço para pegar um dado de uma outra tabela dentro de um laço. Algo assim:

ProdutoDAO dao = new ProdutoDAO();

		ContatoDAO daoC = new ContatoDAO();
		List<Contato> contatos = daoC.getLista("");

		for(Contato contato : contatos){

			List<Produto> produtos = dao.getLista(contato.getId());

			System.out.println("Nome: "+contato.getId());
			System.out.println("Nome: "+((Produto) produtos).getNome());

		}
Criado 3 de agosto de 2005
Ultima resposta 23 de out. de 2007
Respostas 5
Participantes 4