UPDATE/DELETE métodos

4 respostas
walteraragao

Pessoal , primeiramente boa noite a todos.
vou tentar resumir minha dúvida. Estou fazendo uns exercicios da apostila , aonde eu encontrei um pouco de dificuldade para entender o metodo de ALTERAR e REMOVE (update e delete), o insert foi bastante tranquilo , porem como faço para excluir um contato do banco e alterar no código abaixo e oque devo passar pro parametro ? Segue o código.

contato.java

package br.com.walter.jdbc.modelo;

import java.util.Calendar;

public class Contato {

	private long id;
	private String nome;
	private String email;
	private String endereco;
	private Calendar dataNascimento;
	
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getEndereco() {
		return endereco;
	}
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}
	public Calendar getDataNascimento() {
		return dataNascimento;
	}
	public void setDataNascimento(Calendar dataNascimento) {
		this.dataNascimento = dataNascimento;
	}
	
	
	
}

ContatoDAO.java

package br.com.walter.jdbc.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import br.com.walter.jdbc.ConnectionFactory;
import br.com.walter.jdbc.modelo.Contato;

public class ContatoDAO {

	private Connection connection;

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

	public void adiciona(Contato contato) {
		String sql = "insert into contatos (nome,email,endereco,dataNascimento) VALUES (?,?,?,?)";

		try {
			// prepared statement para inserção
			PreparedStatement stmt = connection.prepareStatement(sql);

			// SETA VALORES
			stmt.setString(1, contato.getNome());
			stmt.setString(2, contato.getEmail());
			stmt.setString(3, contato.getEndereco());
			stmt.setDate(4, new Date(contato.getDataNascimento()
					.getTimeInMillis()));

			// executa
			stmt.execute();

			// fecha conexao
			stmt.close();

		} catch (SQLException e) {

		}
	}

	public List<Contato> getLista() {

		try {
			List<Contato> contatos = new ArrayList<Contato>();
			PreparedStatement stmt = this.connection
					.prepareStatement("select * from contatos");
			ResultSet rs = stmt.executeQuery();

			while (rs.next()) {
				// criando o objeto do banco
				Contato contato = new Contato();
				contato.setId(rs.getLong("id"));
				contato.setNome(rs.getString("nome"));
				contato.setEmail(rs.getString("email"));
				contato.setEndereco(rs.getString("endereco"));

				// montando a data
				Calendar data = Calendar.getInstance();
				data.setTime(rs.getDate("dataNascimento"));
				contato.setDataNascimento(data);

				// adicionando o contato a lista
				contatos.add(contato);
			}
			rs.close();
			stmt.close();
			return contatos;
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}

	public void altera(Contato contato) {

		String sql = "update contatos set nome=? , email=?, endereco=?, dataNascimento=? where id=?";

		try {
			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.setString(1, contato.getNome());
			stmt.setString(2, contato.getEmail());
			stmt.setString(3, contato.getEndereco());
			stmt.setDate(4, new Date(contato.getDataNascimento()
					.getTimeInMillis()));
			stmt.setLong(5, contato.getId());

			// excutar
			stmt.execute();

			// fechar a conexao
			stmt.close();

		} catch (SQLException e) {
			throw new RuntimeException(e);
		}

	}

	public void remove(Contato contato){
		try{
		PreparedStatement stmt = connection.prepareStatement("delete from contatos where id=?");
		stmt.setLong(1, contato.getId());
		stmt.execute();
		stmt.close();
		}catch(SQLException e){
			throw new RuntimeException(e);
		}
	}
}

TestaInsere.java

package br.com.walter.testes;

import java.util.Calendar;

import br.com.walter.jdbc.dao.ContatoDAO;
import br.com.walter.jdbc.modelo.Contato;

public class TestaInsere {

	
	public static void main(String[] args) {
		
		Contato contato = new Contato();
		contato.setNome("Walter Aragão");
		contato.setEmail("[email removido]");
		contato.setEndereco("Rua São José nº 604 Vila São Luis - Dc - RJ");
		contato.setDataNascimento(Calendar.getInstance());
		
		//grave essa conexao
		ContatoDAO dao = new ContatoDAO();
		
		//método elegante
		dao.adiciona(contato);
		
		System.out.println("Gravado !");

		//dao.remove(contato);
		
	}

}

OBS: tentei o dao.remove(contato) , porem nao removeu .. eu ja tinha cadastrado esse contato no banco , cadastrei dnv e tentei excluir porem no banco consta 2 cadastros. E no update eu queria mudar só mo e-mail por exemplo , como faço ? E se eu quiser mudar tudo ?

Desde já obrigado !

4 Respostas

M

seu metodo remove o contato pelo id

PreparedStatement stmt = connection.prepareStatement("delete from contatos where id=?"); stmt.setLong(1, contato.getId());
Na classe TestaInsere ta faltando setar o id;

Contato contato = new Contato(); contato.setNome("Walter Aragão"); contato.setEmail("[email removido]"); contato.setEndereco("Rua São José nº 604 Vila São Luis - Dc - RJ"); contato.setDataNascimento(Calendar.getInstance()); contato.setId(1l); // faltou isso

walteraragao

mesmo no banco de dados sendo auto incremento ?

JMARQ

Sim, mesmo sendo auto_increment.

public void remove(Contato contato){  //aqui você está passando um objeto e não uma variável do tipo, por exemplo, Integer.
        try{  
        PreparedStatement stmt = connection.prepareStatement("delete from contatos where id=?"); // aqui a condição WHERE está comparando valores inteiros e não objeto
        stmt.setLong(1, contato.getId());  
        stmt.execute();  
        stmt.close();  
        }catch(SQLException e){  
            throw new RuntimeException(e);  
        }  
    }

Poderia ficar assim:

public void remove(int codigo){
        try{  
        PreparedStatement stmt = connection.prepareStatement("delete from contatos where id=?");
        stmt.setLong(1, codigo);  
        stmt.execute();  
        stmt.close();  
        }catch(SQLException e){  
            throw new RuntimeException(e);  
        }  
    }

Espero ter ajudado.

A

O campo ID sendo autoincremento não tem mesmo porque passá-lo na hora de inserir. Você tá certo sobre isso. Agora, porque seus métodos remove() e altera() não funcionam… tenho uma sugestão: verifique se esse contato que vc passa como parâmetro está válido. coloque um System.out.println(contato.getId()) antes do stmt.execute() e veja se é mostrado um id que existe mesmo no banco. Ah, e olha… não fiz um teste, mas para instruções de insert, delete e update eu costumo usar o stmt.executeUpdate()

Criado 16 de fevereiro de 2012
Ultima resposta 16 de fev. de 2012
Respostas 4
Participantes 4