Estou fazendo o curso Java para Desenvolvimento Web - Curso FJ-21.
fiz o exercício das pag. 67,68.
quando vou cadastrar o contado ele da erro 500.
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
java.text.SimpleDateFormat.parse(Unknown Source)
java.text.DateFormat.parse(Unknown Source)
br.com.caelum.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:35)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.70 logs.
Apache Tomcat/7.0.70
Código:
package br.com.caelum.servlet;
import java.util.Calendar;
public class Contato {
private long id;
private String nome;
private String email;
private String endereco;
private Calendar dataNascimento;
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 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 getDataNascimento() {
return dataNascimento;
}
public void setDataNascimento(Calendar dataNascimento) {
this.dataNascimento = dataNascimento;
}
public void setDataNascimento(String string) {
// TODO Auto-generated method stub
}
}
package br.com.caelum.dao;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import br.com.caelum.jdbc.ConnectionFactory;
import br.com.caelum.servlet.Contato;
public class ContatoDao {
// a conexão com o banco de dados
private Connection connection;
@SuppressWarnings("static-access")
public ContatoDao() {
this.connection = new ConnectionFactory().getConnection();
}
public void adiciona(Contato contato) {
String sql = "insert into contatos"+
" (nome,email,endereco,datanascimento)"+
" values (?,?,?,?)";
try {
//prepared statement para inserção
PreparedStatement stmt = connection.prepareStatement(sql);
//seta os valores
stmt.setString(1, contato.getNome());
stmt.setString(2, contato.getEmail());
stmt.setString(3, contato.getEndereco());
stmt.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis()));
//executa
stmt.execute();
stmt.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public List<Contato> getLista() {
try {
List<Contato> contatos = new ArrayList<Contato>();
PreparedStatement stmt = this.connection.prepareStatement("select * from contatos");
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
Contato contato = new Contato();
contato.setId(rs.getLong("id"));
contato.setNome(rs.getString("nome"));
contato.setEmail(rs.getString("email"));
contato.setEndereco(rs.getString("endereco"));
// montando a data atraves de calenadar
Calendar data = Calendar.getInstance();
data.setTime(rs.getDate("datanascimento"));
contato.setDataNascimento(data);
// adinionamento o objeto a lista
contatos.add(contato);
}
rs.close();
stmt.close();
return contatos;
}catch (SQLException e){
throw new RuntimeException(e);
}
}
public void altera(Contato Contato){
String sql = "update contatos set nome=?, email=?,endereco=?,datanascimento=? where id=?";
try{
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, Contato.getNome());
stmt.setString(2, Contato.getEmail());
stmt.setString(3, Contato.getEndereco());
stmt.setDate(4, new Date(Contato.getDataNascimento().getTimeInMillis()));
stmt.setLong(5, Contato.getId());
stmt.execute();
stmt.close();
}catch (SQLException e){
throw new RuntimeException(e);
}
}
public void remove(Contato Contato){
try {
PreparedStatement stmt = connection.prepareStatement("delete from contatos where id=?");
stmt.setLong(1, Contato.getId());
stmt.execute();
stmt.close();
}catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
package br.com.caelum.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionFactory {
Connection con;
public static Connection getConnection(){
Connection con=null;
try {
con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/fj21","postgres","sistemas");
System.out.println("Conexão efetuada com sucesso!!!");
}catch (SQLException e) {
System.out.println("Não foi possível Conectar!! " +e.getMessage());;
}
return con;
}
}
package br.com.caelum.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.caelum.dao.ContatoDao;
@SuppressWarnings("serial")
@WebServlet("/adicionaContato")
public class AdicionaContatoServlet extends HttpServlet{
protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
//busca o write
PrintWriter out = response.getWriter();
//busca os parametros norequest
String nome = request.getParameter("nome");
String endereco = request.getParameter("endereco");
String email = request.getParameter("email");
String dataEmTexto = request.getParameter("datanascimento");
Calendar dataNascimento = null;
// fazendo a conversão da data
try {
Date date = new SimpleDateFormat("mm/dd/yyyy").parse(dataEmTexto);
dataNascimento = Calendar.getInstance();
dataNascimento.setTime(date);
}catch (ParseException e){
out.println("Erro de corversão da data!!");
return; // para a execusão do método.
}
// monta um objeto contato
Contato contato = new Contato();
contato.setNome(nome);
contato.setEndereco(endereco);
contato.setEmail(email);
contato.setDataNascimento(dataNascimento);
// salva contato
ContatoDao dao = new ContatoDao();
dao.adiciona(contato);
//imprime o nome do contato que foi adicionado
out.println("<html>");
out.println("<body>");
out.println("Contato: "+contato.getNome() + "Adicionado com sucesso!!");
out.println("</body>");
out.println("</html>");
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>Adiciona Contatos</h1>
<hr />
<form action="adicionaContato">
Nome: <input type="text" name="nome" /><br />
E-mail: <input type="text" name="email" /><br />
Endereço: <input type="text" name="endereco" /><br />
Data Nascimento: <input type="text" name="dataNascimento" /><br />
<input type="submit" value="Gravar"/>
</form>
</body>
</html>