Java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21[RESOLVIDO]

Senhores meu problema é esse, quando tenta abrir uma conexao com o banco ele me cai uma exception !!
Vi alguns erros desse aqui no forum porem todas as solucoes nao funfaram aqui, colocar na pasta lib do tomcat, na web-inf/lib, pelo build path, usando ip no endereco, com ou sem porta !

Alguma luz ??

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

fj21-agenda

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

<servlet>
	<servlet-name>AdicionaContato</servlet-name>
	<servlet-class>br.com.darros.servlet.AdicionaContatoServlet</servlet-class>
</servlet>

<servlet-mapping>
	<servlet-name>AdicionaContato</servlet-name>
	<url-pattern>/adicionaContato</url-pattern>
</servlet-mapping>

[/code]

package br.com.darros.jdbc;

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

public class ConnectionFactory {
	
	public Connection getConnection(){
		System.out.println("Conectando ao Bancoo !!");
		try{
			Connection con = DriverManager.getConnection("jdbc:mysql://localhost/fj21","root","");
			return con;		
		}catch (SQLException e){
			throw new RuntimeException(e);
		}		
	}
}

[code]package br.com.darros.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

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

@SuppressWarnings(“serial”)
public class AdicionaContatoServlet extends HttpServlet{

@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
	
	PrintWriter out = response.getWriter();
	
	String nome  = request.getParameter("nome");
	String email = request.getParameter("email");
	String endereco = request.getParameter("endereco");

// String dataEmTexto = request.getParameter(“dataNascimento”);
// Calendar dataNascimento = null;
//
// try {
// Date date = new SimpleDateFormat(“dd/MM/yyyy”).parse(dataEmTexto);
// dataNascimento = Calendar.getInstance();
// dataNascimento.setTime(date);
// } catch (ParseException e) {
// out.println(“Erro de conversao de data”);
// return;
// }

	Contato contato = new Contato();
	contato.setNome(nome);
	contato.setEmail(email);
	contato.setEndereco(endereco);

// contato.setDataNascimento(dataNascimento);

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

}
[/code]

Nov 09, 2011 10:29:19 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.darros.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:15) at br.com.darros.jdbc.dao.ContatoDAO.<init>(ContatoDAO.java:20) at br.com.darros.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:44) 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:169) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 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.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964) 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.darros.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:12) ... 19 more

Acho que está faltando registrar o driver do MySQL:

Class.forName("com.mysql.jdbc.Driver");

Coloca na ConnectionFactory, antes de criar a conexão.

até +!

6 curtidas

Valeuuu, funciono !!

Obrigadoo !

Pergunta. Pela descrição do código, o exemplo é da apostila FJ21 da Caelum. Estou tendo o mesmo problema aqui. Na apostila diz que a partir do java 6 nã é mais necessário utilizar este passo. Estou utilizando o java 6 mas mesmo assim esse erro preciste. A princípio, coloquei o driver do connector do Mysql mais novo. Depois mudei para o que vem no próprio banco, para testar, mas nada!!

Meu código está exatamente o mesmo do descrito pelo colega. Poderia me dar uma ajuda?. Desde já obrigado!!

Pessoal. Consegui resolver. Vi aqui http://www.devmedia.com.br/forum/java/395387-Nao-consigo-gravar-no-banco-usando-JDBC-em-projeto-WEB.html o que estava acontecendo, e percebi que tbm se tratava do mesmo erro. Colocar DriverManager.registerDriver resolveu meu problema.

As configurações que estou usando são as seguintes: Win7 64(irrelevante), JDK 1.7.0, Mysql 5.5, conector do mysql 5.1.18

Abração!!

1 curtida

[quote=leonardoteles]Pessoal. Consegui resolver. Vi aqui http://www.devmedia.com.br/forum/java/395387-Nao-consigo-gravar-no-banco-usando-JDBC-em-projeto-WEB.html o que estava acontecendo, e percebi que tbm se tratava do mesmo erro. Colocar DriverManager.registerDriver resolveu meu problema.

As configurações que estou usando são as seguintes: Win7 64(irrelevante), JDK 1.7.0, Mysql 5.5, conector do mysql 5.1.18

Abração!![/quote]

Valeu, estava lutando com o mesmo erro e nao sabia como resolver. E se alguem pudesse explicar explicar porque deve-se registar o Driver agradeceria muito, visto que a partir de java 1.6 nao era necessario?

Exatamente, tive o mesmo problema, resolvido, porem PORQUE raios preciso dar registerDrive sendo que o java 1.6 ja nao precisa disso?

Fica a questão.

[quote=dertyu765]Exatamente, tive o mesmo problema, resolvido, porem PORQUE raios preciso dar registerDrive sendo que o java 1.6 ja nao precisa disso?

Fica a questão.[/quote]

Eu também nao entendi o porque do erro quando o tive, tenho varios projectos criados da mesma forma e nenhum deles alguma vez deu um erro desses

Sei que o tópico é velho, mas tive esse problema recentemente, e resolvi, importando o mysql-connector-java-5.1.25-bin.jar também para a pasta lib do servidor TomCat! Encontrei em um outro tópico deste fórum, não me lembro a URL.

Tem que usar essa linha antes do return para funcionar.

DriverManager.registerDriver(new com.mysql.jdbc.Driver()); return DriverManager.getConnection("jdbc:mysql://localhost/fj21", "root", "admin");

4 curtidas

Sei que o tópico é bem velho, mas eu tive exatamente o mesmo problema, procurei diversas soluções (aqui no GUJ inclusive) e está solução de incluir o regiterDriver funcionou perfeitamente!

Eu também. Iniciando no Java, mas com muito tempo de experiência no desenvolvimento WEB. Mas só funcionou depois de ler este Post. Mas acho que isso é normal. A apostila te da um direcionamento. O que não funcionar é pesquisa, ou aula.

Att.

Seguindo o padrão ConnectionFactory ensinado pela Caelum, resolvi da seguinte forma:

try {
			Class.forName("com.mysql.jdbc.Driver");
			return DriverManager.getConnection(URL, USER, PASSWORD);
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
		catch(ClassNotFoundException e){
			throw new RuntimeException(e);
		}

O erro estava acontecendo ao criar um objeto do tipo Dao, mas só ocorria se o mesmo fosse criado na servlet, em classes de teste não apresentava o erro. A classe tinha um construtor que retornava uma conexão. Ao registrar o driver e tratar a exceção tudo funcionou.

1 curtida

[quote=fboscato]Tem que usar essa linha antes do return para funcionar.

DriverManager.registerDriver(new com.mysql.jdbc.Driver()); return DriverManager.getConnection("jdbc:mysql://localhost/fj21", "root", "admin");
[/quote]
Realmente salvou.
Tinha um projeto já rodando na base… Porem fora da web, com o driver devidamente adicionado no classPath. Porem ao criar servlets dava erro de driver não encontrado, bastando apenas mudar a ConnectionFactory.

Grato.

Fala galera,

Tive o mesmo problema. Olhando os posts aqui, consegui resolver registrando o driver na classe ConnectionFactory:

try {
Class.forName(“com.mysql.jdbc.Driver”);
return DriverManager.getConnection(“jdbc:mysql://localhost:3306/fj21”, USER, PASSWORD);
} catch (SQLException | ClassNotFoundException e) {
throw new RuntimeException(e);
}

Estou trabalhando com Java 8 e o Tomcat 8.

Abs.

Matos

Caso ainda alguém tenha problemas mesmo fazendo esses passos do pessoal.
Eu achei uma outra maneira que fiz e deu certo também.
Só ir la no mysql.jar que tem que estar no WEB-INF/lib , clica com o botão direito no .jar vai em Build Path … Configure Build Path…
Vai aparecer do lado direito no inicio algo como:
o nome do arquivo .jar… e no final vai estar como (missing).
É só clicar duas vezes nele, vai abrir o diretório com o arquivo .jar novamente, ai e só você selecionar ele , clicar em OK, depois em Apply.
Reinicia o TomCat e testa novamente que vai dar certo.

Pq vc provavelmente tá usando o Tomcat 7 ou superior. Aí por medida de segurança ele te obriga a registrar o drive JDBC

Obrigado pessoal!! Me ajudou aqui.

Verifiquei duas formas que funcionaram.
Comentei a primeira parte e segunda é a do registro do drive abaixo do
try { DriverManager.registerDriver(new com.mysql.jdbc.Driver());


//static {
// try {
// Class.forName(“com.mysql.jdbc.Driver”);
// } catch (Exception e) {
// System.out.println(“ERRO”);
// e.printStackTrace();
// }
//}
public Connection getConnection() {
try{
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
return DriverManager.getConnection(

Aí velho… O meu funcionou pelo que você falou, muito obrigado!