0

I have a problem with my code: now i use Stringbuilder to concatening dates but i receive some errors: My 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;
        }




}

My class Contato ( i dont know if need to implement some code here?)

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

} 
}  

My object 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);  
        }  
    }  
}

My htmllet code cadastra.jsp (to send data to my servlet and saving my db):

<...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> 

I receive this error when pressed submit button:

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.
4

1 回答 1

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。现在您有一个包含联系人生日的字段,您可以将其添加到插入语句中而无需进一步转换。

剩下的唯一挑战是如何Date根据从 ui 中捕获的值创建对象。格式化程序是一种方法。但是Date有一些方便的构造函数可以根据这些值创建日期。请注意,月份是从零开始的,iaw,一月是0,二月1等等。创建好之后,new Date(...)您可以调用 Contato 类上的相应设置器并将出生日期存储在 DTO 上。

于 2013-07-02T19:29:03.473 回答