Olá galera fazendo o exercício da apostila f21 da caelum no capítulo 10 tive esse erro java.lang.NoSuchMethodError, no stacktrace ele aponta para minha classe ContatoDAO mas eu não consigo ver o problema, o erro ocorreu depois que eu fiz o filtro para conexão com o banco, Quando tento verificar o lista de contatos para tentar alterar um registro esse erro é levantado, olhei no meu web.xml e o mapeamento do filtro está correto não consigo ver o erro, peço a ajuda de vocês, alguém sabe o porque do erro? Desde já agradeço
classe CoantatoDAO
package br.com.estudo.DAO;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import br.com.estudo.modelo.Contato;
public class ContatoDAO {
private Connection con;
public ContatoDAO(Connection connection) {
this.con = connection;
}
public void adiciona(Contato contato) {
String sql = "INSERT INTO contatos"
+ "(nome, email, endereco, dataNascimento)"
+ "values (?,?,?,?)";
try {
//Preparedstatement para inserção
PreparedStatement stmt = con.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()));
//executando
stmt.execute();
stmt.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public List<Contato> getLista(){
try {
List<Contato> lista = new ArrayList<Contato>();
PreparedStatement stmt = this.con.prepareStatement("select * from contatos");
ResultSet rs = stmt.executeQuery();
while(rs.next()){
Contato contato = new Contato();
contato.setId(rs.getInt("id"));
contato.setNome(rs.getString("nome"));
contato.setEmail(rs.getString("email"));
contato.setEndereco(rs.getString("endereco"));
//montando a data
Calendar data = Calendar.getInstance();
data.setTime(rs.getDate("dataNascimento"));
contato.setDataNascimento(data);
//add o objeto a lista
lista.add(contato);
}
rs.close();
stmt.close();
return lista;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public Contato pesquisar(long id){
Contato contato = null;
try {
PreparedStatement stmt = this.con.prepareStatement("SELECT * FROM contatos WHERE id=" + id);
ResultSet rs = stmt.executeQuery();
while(rs.next()){
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
Calendar data = Calendar.getInstance();
data.setTime(rs.getDate("dataNascimento"));
contato.setDataNascimento(data);
//add o objeto a lista
}
rs.close();
stmt.close();
return contato;
} 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 = con.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 = con.prepareStatement("DELETE FROM contatos WHERE id=?");
stmt.setLong(1, contato.getId());
stmt.execute();
stmt.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
filtro
package br.com.estudo.filtro;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import br.com.estudo.DAO.ConnectionFactory;
public class FiltroConexao implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
try {
Connection connection = new ConnectionFactory().getConnection();
request.setAttribute("conexo", connection);
chain.doFilter(request, response);
connection.close();
} catch (SQLException e) {
throw new ServletException(e);
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
Servlet que altera e adiciona contato
package br.com.estudo.mvc.logica;
import java.io.PrintWriter;
import java.sql.Connection;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.estudo.DAO.ContatoDAO;
import br.com.estudo.modelo.Contato;
public class AlteraContato implements Logica {
@Override
public void executa(HttpServletRequest request, HttpServletResponse response)
throws Exception {
String idTexto = request.getParameter("id");
if(idTexto != null){
long id = Long.parseLong(idTexto);
Contato contato = new Contato();
contato.setId(id);
contato.setNome(request.getParameter("nome"));
contato.setEndereco(request.getParameter("endereco"));
contato.setEmail(request.getParameter("email"));
// converte a data
String dataEmTexto = request.getParameter("dataNascimento");
Date date = new SimpleDateFormat("dd/MM/yyyy").parse(dataEmTexto);
Calendar dataNascimento = Calendar.getInstance();
dataNascimento.setTime(date);
contato.setDataNascimento(dataNascimento);
Connection connection = (Connection) request.getAttribute("conexao");
ContatoDAO dao = new ContatoDAO(connection);
dao.altera(contato);
System.out.println("Alterando o contato" + contato.getNome());
}else{
PrintWriter out = response.getWriter();
String nome = request.getParameter("nome");
String email = request.getParameter("email");
String endereco = request.getParameter("endereco");
String dataTexto = request.getParameter("dataNascimento");
Calendar dataNascimento = null;
try {
Date data = new SimpleDateFormat("dd/MM/yyyy").parse(dataTexto);
dataNascimento = Calendar.getInstance();
dataNascimento.setTime(data);
} catch (ParseException e) {
out.println("Erro de conversão de data!");
return;// para a execucao do metodo
}
Contato contato = new Contato();
contato.setNome(nome);
contato.setEmail(email);
contato.setEndereco(endereco);
contato.setDataNascimento(dataNascimento);
Connection connection = (Connection) request.getAttribute("conexao");
ContatoDAO dao = new ContatoDAO(connection);
dao.adiciona(contato);
}
RequestDispatcher rd = request
.getRequestDispatcher("/lista-contato-elegantes.jsp");
rd.forward(request, response);
}
}