Eu tava fazendo o exercício CRIANDO FUNCIONALIDADE PARA GRAVAR CONTATOS da fj21 mas no momento que aperto para gravar na pagina web ele lança o erro:
java.lang.RuntimeException
jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:17)
jdbc.dao.ContatoDao.<init>(ContatoDao.java:20)
br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:51)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Minha implementação da classe ConnectionFactory:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionFactory {
public Connection getConnection() {
try {
return DriverManager.getConnection("jdbc:mysql://localhost/fj21", "root", "");
} catch (SQLException e) {
throw new RuntimeException();
}
}
Minha implementação de ContatoDao:
public class ContatoDao {
private Connection connection;
public ContatoDao() {
this.connection = new ConnectionFactory().getConnection();
}
}
e a classe webservlet que adiciona contato:
package br.com.caelum.agenda.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 jdbc.dao.ContatoDao;
import jdbc.modelo.Contato;
@WebServlet("/adicionaContato")
public class AdicionaContatoServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
String nome = request.getParameter("nome");
String endereco = request.getParameter("endereco");
String email = request.getParameter("email");
String dataEmTexto = request.getParameter("dataNascimento");
Calendar dataNascimento = null;
try {
Date date = new SimpleDateFormat("dd/MM/yyy").parse(dataEmTexto);
dataNascimento = Calendar.getInstance();
dataNascimento.setTime(date);
} catch (ParseException e) {
out.println("Erro ao converter a data");
}
Contato contato = new Contato();
contato.setNome(nome);
contato.setEndereco(endereco);
contato.setEmail(email);
contato.setDataNascimento(dataNascimento);
System.out.println(contato.toString());
ContatoDao dao = new ContatoDao();
dao.adiciona(contato);
out.println("<html>");
out.println("<body>");
out.println("Contato " + contato.getNome() +
" adicionado com sucesso");
out.println("</body>");
out.println("</html>");
}
}
FearX
#2
Isso tá completo? No código cê tá chamando métodos que não tão nesse trecho de código. Traz completo pra gente poder te ajudar melhor.
package jdbc.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 jdbc.ConnectionFactory;
import jdbc.modelo.Contato;
public class ContatoDao {
private Connection connection;
public ContatoDao() {
this.connection = new ConnectionFactory().getConnection();
}
public void adiciona(Contato contato) {
String sql = "insert into contatos " + "(nome,email,endereco,dataNascimento)" + " values (?,?,?,?)";
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.execute();
stmt.close();
} catch (SQLException e) {
throw new DAOException(e);
}
}
public List<Contato> getLista() {
try {
List<Contato> contatos = new ArrayList<>();
PreparedStatement stmt = this.connection.prepareStatement("select * from contatos where nome like '%a%'");
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"));
Calendar data = Calendar.getInstance();
data.setTime(rs.getDate("dataNascimento"));
contato.setDataNascimento(data);
contatos.add(contato);
}
rs.close();
stmt.close();
return contatos;
} catch (SQLException e) {
throw new DAOException(e);
}
}
public Contato pesquisar(int id) {
try {
PreparedStatement stmt = this.connection.prepareStatement("select * from contatos where id = " + id);
ResultSet rs = stmt.executeQuery();
Contato contato = new Contato();
while (rs.next()) {
contato.setId(rs.getLong("id"));
contato.setNome(rs.getString("nome"));
contato.setEmail(rs.getString("email"));
contato.setEndereco(rs.getString("endereco"));
Calendar data = Calendar.getInstance();
data.setTime(rs.getDate("dataNascimento"));
contato.setDataNascimento(data);
}
rs.close();
stmt.close();
return contato;
} catch (SQLException e) {
throw new DAOException(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 DAOException(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 DAOException(e);
}
}
}