我的代码有问题:现在我使用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("DataNascimento2"))
.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.
答案 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上。