Erro ao gravar no mysql com servlet

olha eu de novo,
pessoal tenho uma pagina basica para inserir dados no mysql, quando clico em gravar ocorre um erro com o driver se é que entendi o erro. meu projeto fucniona normal com com uma classe de teste para inserir no banco, mas quando uso html+servlet da erro. Ja adicionei o driver com biul path, a variavel de ambiente ta ok tb, ja mapiei os objetos… Olha o codigo …


ERRO
Connect to database...
29/12/2010 16:23:46 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet AdicionaContatoServlet threw exception
java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21
	at br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:11)
	at br.com.caelum.jdbc.dao.ContatoDAO.<init>(ContatoDAO.java:14)
	at br.com.caelum.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:49)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:9)
	... 15 more



<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
		<title>Insert title here</title>
	</head>
	
<html>
	<body>
		<form action="adicionaContato">
			Nome: <input type="text" name="nome" /><br />
			E-mail: <input type="text" name="email" /><br />
			Endereço: <input type="text" name="endereco" /><br />
			Data Nascimento: <input type="text" name="dataNascimento" /><br />
			<input type="submit" value="Gravar" />
		</form>
	</body>
</html>
package br.com.caelum.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.caelum.jdbc.dao.ContatoDAO;
import br.com.caelum.jdbc.modelo.Contato;

public class AdicionaContatoServlet extends HttpServlet {
	
	protected void service(HttpServletRequest request, HttpServletResponse response) 
							throws IOException, ServletException {
		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;
		
		//Fazendo a conversão da data
		try {
			Date date = new SimpleDateFormat("dd/MM/yyy").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
		}
		
		//Mostra 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>");
	}
}

Fabrica de conexão

[code]package br.com.caelum.jdbc;
import java.sql.*;

public class ConnectionFactory {

public Connection getConnection() {
	try {
		System.out.println("Connect to database...");
		return DriverManager.getConnection("jdbc:mysql://localhost/fj21", "root", "");
	} catch(SQLException sqlException) {
		throw new RuntimeException(sqlException);
	}
}

}[/code]
objeto DAO

[code]package br.com.caelum.jdbc.dao;
import java.sql.;
import java.sql.Date;
import java.util.
;
import br.com.caelum.jdbc.ConnectionFactory;
import br.com.caelum.jdbc.modelo.Contato;

public class ContatoDAO {
//Coneção com o banco de dados
private Connection connection;

//Fabrica a conexão com o banco mysql
public ContatoDAO() {
	this.connection = new ConnectionFactory().getConnection();
}

public void adiciona(Contato contato) {
	String sql = "INSERT INTO contatos(nome, email, endereco, dataNascimento) VALUES(?,?,?,?)";
	
	try {
		//Objeto para Inserção no banco PreparedStatement passando a string sql
		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();
		System.out.println("Contato adicionado.");
	} catch(SQLException sqlException) {
		throw new RuntimeException(sqlException);
	}
}

}[/code]
MEU WEB.XML

[code]<?xml version="1.0" encoding="UTF-8"?>

fj21-agenda1

index.html
index.htm
index.jsp
default.html
default.htm
default.jsp

servletOiMundo br.com.caelum.servlet.OiMundo servletOiMundo /oi AdicionaContatoServlet br.com.caelum.servlet.AdicionaContatoServlet AdicionaContatoServlet /adicionaContato [/code]

Faaala garoto,
vc copiou o driver do mysql para dentro do lib do tomcat ?

Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21   

[quote=javajc]Faaala garoto,
vc copiou o driver do mysql para dentro do lib do tomcat ?

Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21   

Eu tenho ele no meu projeto e no server, tenho que fazer algo mais ?

Certa vez tive o mesmo problema, então copiei o arquivo jar do mysql para dentro do diretório LIB do TomCat e resolveu !!

Oi, será que não esta faltando passar a porta do mysql?

seu codigo:

DriverManager.getConnection("jdbc:mysql://localhost/fj21", "root", "");

sugestão:

DriverManager.getConnection("jdbc:mysql://localhost:3306/fj21", "root", "");

fiz isso…
Eureca… vlw brother, mais uma vida salva

e ai galera…td beleza?

eu tambem estava tendo o mesmo problema…usando o mesmo mysql connector num projecto desktop deu certo mas no projecto web nao deu…e ai o que eu fiz??

baixei a ultima versao do mysql connector (5.1.16) e funcionou…

estou com exato mesmo problema, até o projeto é o mesmo, copiei o driver do msql connector tanto o 5.1.15 quanto o 5.1.17, na pasta lib do tomcat e no projeto tambem coloque esses drivers em tudo web-inf/lib, librares/apache tomcat… e nada

Informações: Server startup in 1036 ms
Set 20, 2011 3:31:28 PM org.apache.catalina.core.StandardWrapperValve invoke
Grave: Servlet.service() for servlet [AdicionaContato] in context with path [/fj21-agenda] threw exception
java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21
at br.com.caelum.agenda.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:17)
at br.com.caelum.agenda.dao.ContatoDAO.(ContatoDAO.java:23)
at br.com.caelum.agenda.servlet.AdicionaContatoServlet.processRequest(AdicionaContatoServlet.java:54)
at br.com.caelum.agenda.servlet.AdicionaContatoServlet.doPost(AdicionaContatoServlet.java:95)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at br.com.caelum.agenda.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:14)
… 21 more

Camarada,

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

Quando você informa o path para o mysql, precisa colocar a porta…

jdbc:mysql:3306//localhost/fj21 

Caso contrário, ele irá apresentar o erro, pois o driver não conhece esse pattern de path

jdbc:mysql://localhost/fj21 

Entendeu?