Iniciante - Problemas com NullPointer

1 resposta
A

Boa noite amigos,

Sou iniciante em Java e estou acompanhando a apostila da Caelum FJ-21 Desenvolvimento Web. Estou no início dela e seguindo os exercícios. Ao executar um exercício proposto estou recebendo o erro de Nullpointer. Sei que isso é por estar fazendo referência a algum objeto que não foi iniciado mas mesmo fazendo várias mudanças não consegui identificar. Segui o exercício exatamente como na apostila, fiz algumas alterações por conta própria mas em nenhuma delas funcionou. Gostaria da ajuda de vocês, para entender e localizar o problema.
No exemplo é um pequeno formulário que envia os dados para uma Servlet e salva no Banco de Dados.

Segue abaixo as classes.

Classe Contato

public class Contato {

	private Integer id;
	private String nome;
	private String email;
	private String endereco;
	private Calendar dataNascimento;
	
	public Contato () {
		
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer 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

public class contatoDAO extends ConnectionFactory {
	
	private Connection connection;
	
	public contatoDAO(){
	}

	public int criar (Contato contato){
		
		String sql = "insert into CONTATO (nome, email, endereco, dataNascimento) values (?, ?, ?, ?) returning 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()));
			ResultSet rs = stmt.executeQuery();
			
			if (rs.next()){
				return rs.getInt("id");
			}
			
			throw new RuntimeException("O cadastro do contato nao foi criado.");
			
        } catch (Exception ex) {

        	throw new RuntimeException("Erro ao criar cadastro de contato", ex);
        
        } finally {
        
        	super.fecharConexao();
        
        }
    }

Servlet

@WebServlet("/AdicionaContatoServlet")
public class AdicionaContatoServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	public AdicionaContatoServlet() {
        super();
    }

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
		PrintWriter out = response.getWriter();
		
		//Pegando os parâmetros do Request
		String nome = request.getParameter("nome");
		String email = request.getParameter("email");
		String endereco = request.getParameter("endereco");
		String dataEmTexto = request.getParameter("dataNascimento");
		Calendar dataNascimento = null;
		
		//Fazendo a conversão da data
		try {
			
			Date date = new SimpleDateFormat("dd/MM/yyyy").parse(dataEmTexto);
			dataNascimento = Calendar.getInstance();
			dataNascimento.setTime(date);
			
	} catch (java.text.ParseException e) {
		
		out.println("Erro de conversão da data");
		return; //Para a execução do método
		}
		
		//Montando um objeto contato
		Contato contato = new Contato();
		
		contato.setNome(nome);
		contato.setEmail(email);
		contato.setEndereco(endereco);
		contato.setDataNascimento(dataNascimento);
		
		//chamando o método para salvar criado na DAO
		contatoDAO dao = new contatoDAO();

		dao.criar(contato);
				
		//exibe os dados do contato adicionado
		out.println("<html>");
		out.println("<body>");
		out.println("Contato: " + contato.getNome() + " foi adicionado");
		out.println("</body>");
		out.println("</html>");

}
}

E esse é o erro que eu recebo:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error that prevented it from fulfilling this request.

exception

java.lang.NullPointerException
dao.contatoDAO.adiciona(contatoDAO.java:22)
controle.AdicionaContatoServlet.service(AdicionaContatoServlet.java:66)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.52 logs.

1 Resposta

B
throw new RuntimeException("O cadastro do contato nao foi criado.");

Na linha 27 ele tá disparando essa exception, porque ela está ali?

Criado 17 de maio de 2014
Ultima resposta 19 de mai. de 2014
Respostas 1
Participantes 2