Não consigo excluir ou atualizar dados do banco de dados usando JDBC

Estou seguindo uma das apostilas da Caelum (Java para web, pag 37) estou praticando alguns exercícios opcionais, onde tem os metodos inserir, listar, atualizar e deletar.
Eu fiz do jeitinho que está la na página porém quando chamo o método deletar no método main mostra um erro java.lang.NullPointerException. sou novo em programação.

segue o código:
package br.com.caelum.jdbc.modelo;

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.caelum.jdbc.ConnectionFactory;

public class ContatoDao {
	private Connection connection;
	private Contato contato;

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

	}

	
	
	public void adiciona(Contato contato) throws SQLException {
		String sql = "insert into contatos" + "(nome, email, endereco, datanascimento)" + "values (?,?,?,?)";
		try {

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

			// seta os 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();
			stmt.close();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		} finally {
			connection.close();
		}
	}

	public List<Contato> getLista() throws SQLException {

		List<Contato> contatos = new ArrayList<>();

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

			while (rs.next()) {
				contato = new Contato();
				contato.setId(rs.getLong("id"));
				contato.setNome(rs.getString("nome"));
				contato.setEmail(rs.getString("email"));
				contato.setEndereco(rs.getString("endereco"));

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

				contatos.add(contato);
			}
			rs.close();
			stmt.close();
			return contatos;
		} catch (SQLException e) {
			throw new RuntimeException(e);
			
		} finally {
			
			connection.close();
		}

	}

	public void altera(Contato contato) {
		String sql= "update contatos set nome=?, email=?, endereco=?, "+ "dataNascimento=? where id=?"; 
		try {
			PreparedStatement stmt = connection.prepareStatement("update from contato where id=?");
			stmt.setString(1, contato.getNome());
			stmt.setString(2, contato.getEmail());
			stmt.setString(3, contato.getEndereco());
			stmt.setDate(4, new Date (contato.getDataNascimento().getTimeInMillis()));
			stmt.execute();
			stmt.close();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public void remove (Contato contato){
		try {
			
			PreparedStatement stmt = connection.prepareStatement("delete"+"from contatos where id=?"); 
			
			stmt.setLong(1, contato.getId());
			stmt.executeQuery();
			stmt.close();
		} catch (Exception e) {
			System.out.println("houve erro"+e);
		}
		
		
	}
}

package br.com.caelum.jdbc.teste;

import java.sql.SQLException;
import java.util.Calendar;
import java.util.List;
import java.util.Scanner;

import br.com.caelum.jdbc.modelo.Contato;
import br.com.caelum.jdbc.modelo.ContatoDao;

public class TestaInsere {

	public static void main(String[] args) throws SQLException {
		Contato contato = new Contato();
		ContatoDao dao = new ContatoDao();
		Scanner sc = new Scanner(System.in);
		
		System.out.println("digite a opção\n"
				+ "1- cadastrar\n"
				+ "2- listar\n"
				+ "3- remover");
		int op=sc.nextInt();
		
		switch (op){
		case 1:
			// preenche os valores
			System.out.println("digite o nome");
			String nome = sc.next();

			System.out.println("digite o email");
			String email = sc.next();

			System.out.println("digite o endereço");
			String endereco = sc.next();

			contato.setNome(nome);
			contato.setEmail(email);
			contato.setEndereco(endereco);
			contato.setDataNascimento(Calendar.getInstance());
			
			dao.adiciona(contato);
			System.out.println("gravado");
			break;
			
		case 2:
			List<Contato> contatos = dao.getLista();
			
			
			
			for (Contato contat : contatos){
				System.out.println("nome"+contat.getNome());
				System.out.println("email"+contat.getEmail());
				System.out.println("endereco"+contat.getEndereco());
				System.out.println("dataNascimento"+contat.getDataNascimento()+"\n");
				
			}
			break;
		case 3:
//			não sei como alterar um contato passando o id	
			break;
		case 4:
//			não sei como deletar um contato
                       break;
		case 0:
			
		}
		
			
		
		
		
		
		
		
		

	}

}

Deletar: Você tem de passar um objeto do tipo Contato com o id preenchido. (id do que você quer deletar lá no banco).
Atualizar: Você passar um objeto do tipo Contato com id do contato para alteração com os outros atributos preenchidos.

somente o metodo remove

public void remove (Contato contato //este parâmetro ja contem o id certo?) {
try {

		PreparedStatement stmt = connection.prepareStatement("delete"+"from contatos where id=15" ); 
		
		stmt.setLong(1, contato.getId() //este aqui eu ja recupero o id certo?);
		stmt.executeQuery();
		stmt.close();
	} catch (Exception e) {
		System.out.println("houve erro"+e);
	}
	
	
}

}

e para testar so consigo pensar nisto:
case 3:
dao.remove(contato);
break;

no meu banco existe 4 registros com id 12, 13, 14, 15

quando tento remover aparece o errojava.lang.NullPointerException

Sim, já recupera o id.

Ali na String com o sql, coloca um espaço entre delete e from também. E não esqueça que é “id=?”.

Para deletar seria algo assim:

Contato contato = new Contato(1); //construtor de contato só com o id no caso.

dao.remove(contato);

Ta dando nullpointer pois você está chamando um objeto que não existe na memória.

Ei man, pra facilitar a sua vida sugiro você fazer um curso de SQL e banco de dados relacional, que é esse que voçê ta usando. tem um monte de material bacana na internet.
Abs.

1 curtida

blz @JulioCesarSF obrigado eu vou tentar aqui, quaquer coisa digo algo

vlw @programador1225, obrigado pela dica

Blz consegui! Obg