Boa noite, estou tentando fazer o exercício 1 da apostila fj21, porém, está dando o seguinte erro:
Exception in thread “main” java.lang.NullPointerException
at br.com.caelum.jdbc.dao.ContatoDAO.altera(ContatoDAO.java:81)
at br.com.caelum.jdbc.teste.TestaAltera.main(TestaAltera.java:22)
Fiz uma busca no forum, encontrie um tópico, mas não identifiquei o problema no meu código.
Obrigado.
Segue o código
package br.com.caelum.jdbc.dao;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.util.List;
import java.util.ArrayList;
import java.util.Calendar;
import br.com.caelum.jdbc.ConnectionFactory;
import br.com.caelum.jdbc.modelo.Contato;
public class ContatoDAO {
// a conexão com o banco de dados
private Connection connection;
public ContatoDAO(){
this.connection = new ConnectionFactory().getConnection();
System.out.println("Conectado");
}
public void adiciona(Contato contato) throws SQLException {
String sql = "INSERT INTO contatos (nome, email, endereco, dataNascimento) values(?,?,?,?)";
// 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();
}
public List<Contato> getLista() throws SQLException{
List<Contato> contatos = new ArrayList<Contato>();
PreparedStatement stmt = connection.prepareStatement("Select * from contatos where nome like 'A%' ");
ResultSet rs = stmt.executeQuery();
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"));
// montando a data através do Calendar
Calendar data = Calendar.getInstance();
data.setTime(rs.getDate("dataNascimento"));
contato.setDataNascimento(data);
// adicionando o objeto à lista
contatos.add(contato);
}
rs.close();
stmt.close();
return contatos;
}
public void altera(Contato contato) {
String sql = "update contatos set nome=?, email=?, endereco=?, dataNascimento=? where id=?";
try{
PreparedStatement stmt = this.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());
stmt.execute();
stmt.close();
}catch(SQLException e){
e.printStackTrace();
}
}
public void remove(Contato contato) throws SQLException{
PreparedStatement stmt = connection.prepareStatement("delete from contatos where id=?");
stmt.setLong(1, contato.getId());
stmt.execute();
stmt.close();
}
}
package br.com.caelum.jdbc.teste;
import java.sql.SQLException;
import br.com.caelum.jdbc.dao.ContatoDAO;
import br.com.caelum.jdbc.modelo.Contato;
public class TestaAltera {
public static void main(String[] args) {
Contato contato = new Contato();
ContatoDAO dao = new ContatoDAO();
contato.setNome("Novo");
contato.setEmail("novo email");
contato.setEndereco("novo endereço");
contato.setId(1);
dao.altera(contato);
}
}