Olá gente, estou estudando Java Web pela apostila da Caelum e no exercício 5.11 (Formulário) acabei parando por um erro.
java.lang.NullPointerException
dao.ContatoDao.adiciona(ContatoDao.java:22)
servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:53)
Já percebi que o erro é ao adicionar ao banco, mas não sei o que está errado pois testei o código ponta a ponta e ele funcionou. Quando inseri a Servlet foi que o erro apareceu.
FORMULÁRIO
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Formulário</title>
</head>
<body>
<h1> Adiciona Contatos </h1>
<form action="adicionaContato">
Nome: <input type="text" name="nome"/><br/>
E-mail: <input type="email" name="email"/> <br/>
Endereço: <input type="text" name="endereco"/><br/>
Data de Nascimento: <input type="text" name="dataNascimento"/><br/><br/>
<input type="submit" value="Gravar">
</form>
</body>
</html>
CONNECTIONFACTORY
public class ConnectionFactory {
public Connection createConnection() {
Connection conexao = null;
try {
conexao = DriverManager.getConnection("jdbc:mysql://localhost:3306/fj21", "root", "root");
} catch(SQLException e) {
e.printStackTrace();
}
return conexao;
}
}
CONTATO
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;
}
}
CONTATODAO
public class ContatoDao {
private Connection conexao;
public ContatoDao() {
this.conexao = new ConnectionFactory().createConnection();
}
// Método para adicionar
public void adiciona(Contato contato){
String sql = "INSERT INTO contato(nome, email, endereco, dataNascimento) VALUES(?,?,?,?)";
try {
//Prepara Statement
PreparedStatement stmt = conexao.prepareStatement(sql);
//Setar 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) {
e.printStackTrace();
}
}
}
SERVLET
@WebServlet("/adicionaContato")
public class AdicionaContatoServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
// Buscar parametros no request
String nome = request.getParameter("nome");
String email = request.getParameter("email");
String endereco = request.getParameter("endereco");
String dataEmTexto = request.getParameter("dataNascimento");
Calendar dataNascimento = null;
// Conversão da data
try {
Date date = new SimpleDateFormat("dd/MM/yyyy").parse(dataEmTexto);
dataNascimento = Calendar.getInstance();
dataNascimento.setTime(date);
} catch(java.text.ParseException e) {
out.println("Erro de conversão.");
return; //para a execução do método.
}
//Monta objeto contato
Contato contato = new Contato();
contato.setNome(nome);
contato.setEmail(email);
contato.setEndereco(endereco);
contato.setDataNascimento(dataNascimento);
//Salvar o 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>");
}
}
Se alguém puder me ajudar, eu agradeço.