[Resolvido]Erro java.lang.NullPointerException

6 respostas
D

Estou com um problema que já comecei a resolver em partes! Na verdade estava tentando pegar valores de data de nascimento de uma combobox que possuia dia, mes e ano. Ex: ... para isso utilizei o Stringbuilder para fazer uma concatenação de strings nesse caso um objeto que concatena dia/mes/ano. Porém tenho algumas dificuldades. Vejam o Codigo:

Minha Servlet:
package br.com.cad.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.cad.dao.Cadastro;
import br.com.cad.basica.Contato;

public class AddDados extends HttpServlet{
	
	protected void service(HttpServletRequest request, HttpServletResponse response)   
            throws IOException, ServletException { 
		
	
 PrintWriter out = response.getWriter();
	 String nome = request.getParameter("nome");
	 String sobrenome = request.getParameter("sobrenome");
	 String rg = request.getParameter("rg");  
	 String cpf = request.getParameter("cpf");  
	 String sexo = request.getParameter("sexo");
	 StringBuilder finalDate = new StringBuilder("DataNascimento1")
.append("/"+request.getParameter("DataNascimento‌​2"))
.append("/"+request.getParameter("DataNascimento3"));
	 
 SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
 finalDate.toString(); 
 Contato contato = new Contato();  
	 contato.setNome(nome); 
	 contato.setSobrenome(sobrenome);
	 contato.setRg(rg);  
	 contato.setCpf(cpf);  
	 contato.setSexo(sexo);
	 	if ("Masculino".equals(contato.getSexo())) {  
         contato.setSexo("M");  
	 		} else {  
         contato.setSexo("F");  
	 	}  

 Cadastro dao = new Cadastro();  
 	 dao.adiciona(contato);
 out.println("<html>");  
 out.println("<body>");  
 out.println("Contato " + contato.getNome() + " adicionado com sucesso");  
 out.println("</body>");  
 out.println("</html>"); 

} 
}
Meu objeto Dao:
package br.com.cad.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Date;

import br.com.cad.dao.ConnectDb;
import br.com.cad.basica.Contato;
public class Cadastro {  
    
    private Connection connection;  
      
     
    public Cadastro() {  
        this.connection = new ConnectDb().getConnection();  
    }  
      
    public void adiciona(Contato contato) {  
        String sql = "INSERT INTO dados_cadastro(pf_nome, pf_ultimonome, pf_rg, pf_cpf, pf_sexo,pf_dt_nasc) VALUES(?,?,?,?,?,?,?,?)";  
        try {  
             
            PreparedStatement stmt = connection.prepareStatement(sql);  
              
            stmt.setString(1, contato.getNome());  
            stmt.setString(2, contato.getSobrenome());
            stmt.setString(3, contato.getRg());  
            stmt.setString(4, contato.getCpf());
            stmt.setString(5, contato.getSexo());
            stmt.setDate(6, new Date( contato.getDataNascimento1().getTimeInMillis()) );
            
              
            stmt.execute();  
            stmt.close();  
            System.out.println("Cadastro realizado com sucesso!.");  
        } catch(SQLException sqlException) {  
            throw new RuntimeException(sqlException);  
        }  
    }  
}
Aqui minha classe Contato ( será se falta algo aqui?):
package br.com.cad.basica;

import java.util.Calendar;

public class Contato {
	
		private Long id;
		private String nome;
		private String sobrenome;
		private String email;
		private String endereco;
		private Calendar dataNascimento1;
		private Calendar dataNascimento2;
		private Calendar dataNascimento3;
		private String rg;
		private String cpf;
		private String sexo;
		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 getSobrenome() {
			return sobrenome;
		}
		public void setSobrenome(String sobrenome) {
			this.sobrenome = sobrenome;
		}
		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 getDataNascimento1() {
			return dataNascimento1;
		}
		public void setDataNascimento1(Calendar dataNascimento1) {
			this.dataNascimento1 = dataNascimento1;
		}
		public Calendar getDataNascimento2() {
			return dataNascimento2;
		}
		public void setDataNascimento2(Calendar dataNascimento2) {
			this.dataNascimento2 = dataNascimento2;
		}
		public Calendar getDataNascimento3() {
			return dataNascimento3;
		}
		public void setDataNascimento3(Calendar dataNascimento3) {
			this.dataNascimento3 = dataNascimento3;
		}
		public String getRg() {
			return rg;
		}
		public void setRg(String rg) {
			this.rg = rg;
		}
		public String getCpf() {
			return cpf;
		}
		public void setCpf(String cpf) {
			this.cpf = cpf;
		}
		public String getSexo() {
			return sexo;
		}
		public void setSexo(String sexo) {
			this.sexo = sexo;
		}

}
Pequeno trecho do meu codigo html cadastra.jsp:
<label>Data de nascimento</label>
		  	<br>
            	<select id="birthDay" name="dataNascimento1">
            		<option selected="" value="">Dia</option>
						<option value="01">1</option>
						<option value="02">2</option>
</select>
              <select id="birthMonth" name="dataNascimento2">
                	<option selected="" value="">Mês</option>
                        <option value="01">janeiro</option>
                        <option value="02">fevereiro</option>
</select>
              <select id="birthYear" name="dataNascimento3">
                 <option selected="" value="">Ano</option>
                        <option value="2013">2013</option>
                        <option value="2012">2012</option>
</select>
e o erro retornado após clicar no botão enviar: 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
br.com.cad.dao.Cadastro.adiciona(Cadastro.java:30)
br.com.cad.servlet.AddDados.service(AddDados.java:48)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.40 logs.

6 Respostas

gustavosedit

Olá, você não definiu nenhum valor para o atributo “dataNascimento1” do seu objeto “contato”. Isto está causando o NullPointerException na linha 30 da classe Cadastro.

D
Eu alterei algumas coisas porém tenho algumas duvidas:
public class Contato {
           private Date  dataNascimento;
public Date getDataNascimento() {
			return dataNascimento;
		}
		public void setDataNascimento(Date dataNascimento) {
			this.dataNascimento = dataNascimento;
public class AddDados extends HttpServlet{
	
	protected void service(HttpServletRequest request, HttpServletResponse response)   
            throws IOException, ServletException { 
		
	
 PrintWriter out = response.getWriter();
int day = Integer.parseInt(request.getParameter("day"));
	 int month = Integer.parseInt(request.getParameter("month"));
	 int year = Integer.parseInt(request.getParameter("year"));
Contato contato = new Contato(); 
contato.setDataNascimento(dataNascimento); //aqui tem erro
como faço para concatenar as day+month+year e formatar como dd/MM/yyyy?
gustavosedit

O método getParameter() já retorna uma string, é só você concatenar os valores dos parâmetros “day”, “month” e “year” que recuperar do request.
Quanto a definir um objeto Date com esses valores, você pode dar uma olhadinha na api da classe SimpleDateFormat.

D
Bom fiz agora o seguinte: Minha servlet:
String datanascimento = request.getParameter("day")+ request.getParameter("month")+ request.getParameter("year");
	 Calendar dataNascimento = null;
	 try{
	 
	 Date date = new SimpleDateFormat("dd/MM/yyyy").parse(datanascimento);
	 dataNascimento = Calendar.getInstance();
	 dataNascimento.setTime(date);
	  } catch (ParseException e) {
	 out.println("Erro de conversão da data");
	 return;
	}
Contato contato = new Contato();  
contato.setDataNascimento(dataNascimento);
Meu objeto dao:
String sql = "INSERT INTO dados_cadastro(pf_nome, pf_ultimonome, pf_rg, pf_cpf, pf_sexo,pf_dt_nasc) VALUES(?,?,?,?,?,?)";  
        try {  
             
            PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setDate(6, new Date( contato.getDataNascimento().getTimeInMillis()) );
Porém agora da a mensagem erro de conversão de data! Só lembrando que estou concatenando os valores vindos do formulário que são de um select, onde está o erro?
gustavosedit

Vc não está colocando a barra (/) na concatenação. Concatene as barras ou tira elas do seu pattern que irá funcionar.

D

Obrigado resolvido!

Criado 2 de julho de 2013
Ultima resposta 4 de jul. de 2013
Respostas 6
Participantes 2