我收到了错误java.lang.NullPointerException

时间:2013-07-02 19:25:24

标签: java html servlets dao

我的代码有问题:现在我使用Stringbuilder来连接日期但我收到一些错误: 我的Servlet:

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




}

我的班级Contato(我不知道是否需要在这里实现一些代码?)

  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>"); 

} 
}  

我的对象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);  
        }  
    }  
}

我的htmllet代码cadastra.jsp(将数据发送到我的servlet并保存我的数据库):

<...some code here
    <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> 

按下提交按钮时收到此错误:

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.

1 个答案:

答案 0 :(得分:2)

在添加联系人(?)之前,您必须致电contato.setDataNascimento1(someDate)。问题在于这句话:

contato.getDataNascimento1().getTimeInMillis()

contato.getDataNascimento1()在执行时解析为null

计算了行数,该语句位于第30行


<强>加成

你应该替换

private Calendar dataNascimento1;
private Calendar dataNascimento2;
private Calendar dataNascimento3;

private Date dataNascimento;

并相应地更改getter / setter。现在您有一个包含联系人birthdate的字段,您可以将其添加到insert语句中,而无需进一步转换。

唯一剩下的挑战是如何根据ui中捕获的值创建Date对象。格式化程序是一种方法。但是Date有一些方便的构造函数来基于这些值创建日期。请注意,月份为零,Iaw,1月是0,2月1,依此类推。创建new Date(...)后,您可以在Contato类上调用相应的setter,并将生日期存储在DTO上。