Servlet não acha conexão com driver MySql

2 respostas
buiutripa

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?

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("<html>");
		out.println("<body>");
		out.println("Contato " + contato.getNome() + " adicionado com sucesso");
		out.println("</body>");
		out.println("</html>");
	}

}

O erro acontece exatamente aqui:

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);
		}
	}
}

2 Respostas

victorcosta

A lib do driver mysql tem q estar no diretório padrão de libs de um aplicativo WEB, que é /WEB-INF/lib

buiutripa

Era isso mesmo, obrigado victorcosta :smiley:

Está nos meus planos aprender jQuery, visitarei seu blog dentro em breve :wink:

Criado 4 de setembro de 2011
Ultima resposta 4 de set. de 2011
Respostas 2
Participantes 2