[Resolvido]Erro java.lang.NullPointerException

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:

[code]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("");
out.println("");
out.println(“Contato " + contato.getNome() + " adicionado com sucesso”);
out.println("");
out.println("");

}
}

[/code]
Meu objeto Dao:

[code]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);  
    }  
}  

}[/code]
Aqui minha classe Contato ( será se falta algo aqui?):

[code]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;
	}

}
[/code]
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.

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.

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;

[code]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 [/code]
como faço para concatenar as day+month+year e formatar como dd/MM/yyyy?

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.

Bom fiz agora o seguinte:
Minha servlet:

[code]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); [/code]

Meu objeto dao:

[code]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()) );[/code]
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?

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

Obrigado resolvido!