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:
}
}
}