Problema com exercício da apostila da caelum fj21

9 respostas
Viniciustelles

Boa tarde pessoal, estou estudando a apostila fj21 e estou no exercício de inserir contatos no banco através de um formulário html, fiz o mapeamento da servlet correto minha aplicação sobe e etc.. mas da o seguinte erro com o jdbc e nao deixa inserir.

HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3307/fj21
	br.com.caelum.model.dao.ConnectionFactory.getConnection(ConnectionFactory.java:14)
	br.com.caelum.model.dao.ContatoDao.<init>(ContatoDao.java:22)
	br.com.caelum.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:49)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause 

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3307/fj21
	java.sql.DriverManager.getConnection(DriverManager.java:604)
	java.sql.DriverManager.getConnection(DriverManager.java:221)
	br.com.caelum.model.dao.ConnectionFactory.getConnection(ConnectionFactory.java:12)
	br.com.caelum.model.dao.ContatoDao.<init>(ContatoDao.java:22)
	br.com.caelum.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:49)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.35 logs.


--------------------------------------------------------------------------------

Apache Tomcat/6.0.35

Obs: no exercicio anterior a classe de conexao e o driver estavam fucionando corretamente

9 Respostas

N

Você colocou o driver do MySQL na pasta WEB-INF/lib do seu projeto?

Viniciustelles

Coloquei sim :frowning:

N
java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3307/fj21

Nessa linha tá dizendo que não foi possível encontrar o driver.

Viniciustelles

coloquei um main na classe de conexão, e rodei apenas ela para ver se pegava algum erro, e não gerou nenhum erro. não sei oque pode estar havendo??? :S

N

Posta sua classe AdicionaContatoServlet

Viniciustelles
package br.com.caelum.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.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.caelum.model.Contato;
import br.com.caelum.model.dao.ContatoDao;

public class AdicionaContatoServlet extends HttpServlet {
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws IOException, ServletException {
		// 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>");
	}
}
N

Veja se isso resolve: http://www.guj.com.br/java/253440-no-suitable-driver-found-for-jdbcmysqllocalhostfj21-resolvido/2#1317719

Viniciustelles

pois eh foi oque você já tinha me sugerido, adicionar no build path, sim está certinho o erro continua persistindo :S

paulolimac

Vinicius, o problema deve estar ou no driver do mysql que não deve estar instalado corretamente (é o mais provável) ou no seu ConnectionFactory.

Sobre o primeiro caso, confime que o driver do mysql está no Buildpath. Veja a figura anexa.

Quanto ao segundo caso, veja se o seu ConnectionFactory está como o código abaixo. ATENÇÃO: inclui umas linhas diferentes da apostila, para conseguir rodar o mysql. Estas linhas estão com comentários.

OBS: veja se os imports (primeiras linhas do código abaixo) estão corretas. Você pode ter importado alguma classe diferente sem querer. A IDE insere estas linhas automaticamente e as vezes inserimos a errada, mas nem notamos.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


/**
 * Classe que modela uma fábrica de conexões		
 */

public class ConnectionFactory {
	
	/**
	 * Cria uma conexão de forma encapsula
	 * @return
	 */
	public Connection getConnection(){
		System.out.println("Conectando ao banco");
		try {
			DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //linha incluida sem orientação da apostila
			return DriverManager.getConnection("jdbc:mysql://localhost/fj21", "root", "123456"); //ponha SEU login-senha usados no SEU acesso ao BD
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}

}

Boa sorte na conexão

Criado 6 de julho de 2012
Ultima resposta 6 de jul. de 2012
Respostas 9
Participantes 3