Estou usando Eclipse + Tomcat6 integrado.
O código do meu servlet segue abaixo, quando o testo num navegador recebo um:
java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21
br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:13)
br.com.caelum.jdbc.dao.ContatoDAO.<init>(ContatoDAO.java:20)
br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:64)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
Daí coloquei um main() no Servlet com o código de conexão com o banco e o rodei como um arquivo java normal (Shift + Alt + X + J) no Eclipse e funcionou perfeitamente, gerando a saída esperada. O que pode estar acontecendo?
[code]package br.com.caelum.agenda.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.caelum.jdbc.ConnectionFactory;
import br.com.caelum.jdbc.dao.ContatoDAO;
import br.com.caelum.jdbc.modelo.Contato;
/**
-
Servlet implementation class AdicionaContatoServlet
*/
public class AdicionaContatoServlet extends HttpServlet {
private static final long serialVersionUID = 1L;public static void main(String[] args) throws SQLException {
Connection connection = new ConnectionFactory().getConnection();
System.out.println(“Conexão aberta!”);
connection.close();
}
/**-
@see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// busca o writer
PrintWriter out = response.getWriter();// buscando os parâmetros no request
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(“dd/MM/yyyy”).parse(dataEmTexto);
dataNascimento = Calendar.getInstance();
dataNascimento.setTime(date);
} catch (ParseException e) {
out.println(“Erro de conversão da data”);
return; //para a execuçã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 o contato
ContatoDAO dao = new ContatoDAO();
dao.adiciona(contato);// imprime o nome do contato que foi adicionado
out.println("");
out.println("");
out.println(“Contato " + contato.getNome() + " adicionado com sucesso”);
out.println("");
out.println("");
}
-
}
[/code]
O erro acontece exatamente aqui:
[code]package br.com.caelum.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionFactory {
public Connection getConnection() {
System.out.println(“Conectando ao banco”);
try {
return DriverManager.getConnection(“jdbc:mysql://localhost/fj21”, “root”, “123”);
} catch(SQLException e) {
throw new RuntimeException(e);
}
}
}[/code]