HTTP Status 500 - java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/db

Pessoal, bom dia!

Parei de desenvolver em meados de 2009 e estou tentando voltar agora… “tá dificil”… rs

Se for possível, preciso da ajuda de vocês.

Estou com o Eclipse Kepler, Java 7, MySql 5.6 (tentei tambem com Oracle XE 11g)

Ocorre que baixei uma apostila da CALEUM para ajudar, a FJ21 e fui seguindo nela e lembrando dos passos para interagir com um banco de dados…

O JAR que estou usando é o da pasta “C:\Arquivos de programas\MySQL\MySQL Connector J” “mysql-connector-java-5.1.27-bin.jar”

Copiei e colei na pasta do projeto WebContent\WEB-INF\lib, cliquei nele com o botão direito e cliquei em Build Path e Add to Build Path.

O interessante é que rodando uma classe criada com base na apostila TestaLista, mas não ono Server e sim no JavaApplication (Run As --> Java Application) retorna as linhas da tabela do banco corretamente, mas se rodo a aplicação pelo Server ocorre o erro descrito no titulo do tópico.

Já tentei de tudo e não consegui sucesso… Agradeço antecipadamente!!!

Classe ConnectionFactory

package banco;

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

public class ConnectionFactory {
	public Connection getConnection() {
		try {
//			return DriverManager.getConnection("jdbc:oracle:thin:DBSEMA/semanario@localhost:1521:XE");
			return DriverManager.getConnection("jdbc:mysql://localhost/dbsema","dbsema","semanario");
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
}

Classe ProfessorDao

package banco;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class ProfessorDao {

	// a conexão  com o banco de dados
	private Connection connection;

	public ProfessorDao() {
		this.connection = new ConnectionFactory().getConnection();
	}
	
	public void adiciona(Professor professor) {
		String sql = "insert into t_professor " +
					"(nome,usuario,senha,cpf,rg,endereco,cidade,email,ativo) " +
					"values (?,?,?,?,?,?,1,?,'S')";
	try {
		//prepared statement para inserção
		PreparedStatement stmt = this.connection.prepareStatement(sql);
		
		//seta os valores
		stmt.setString(1, professor.getNome());
		stmt.setString(2, professor.getUsuario());
		stmt.setString(3, professor.getSenha());
		stmt.setString(4, professor.getCpf());
		stmt.setString(5, professor.getRg());
		stmt.setString(6, professor.getEndereco());
//		stmt.setInt(7, professor.getCidade());
		stmt.setString(7, professor.getEmail());
//		stmt.setString(9, professor.getAtivo());
		
		//executa
		stmt.execute();
		stmt.close();
		
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
	
	public List<Professor> getLista() {
		try {
		List<Professor> professores = new ArrayList<Professor>();
		PreparedStatement stmt = this.connection.prepareStatement("Select * from t_professor");
		ResultSet rs = stmt.executeQuery();
		
		while (rs.next()) {
			//criando o objeto Professor
			Professor professor = new Professor();
			professor.setId_prof(rs.getLong("id_prof"));
			professor.setNome(rs.getString("nome"));
			professor.setUsuario(rs.getString("usuario"));
			professor.setSenha(rs.getString("senha"));
			
			//adicionando objeto a lista
			professores.add(professor);		
		}
		rs.close();
		stmt.close();
		return professores;
	} catch (SQLException e) {
		throw new RuntimeException(e);
	}
	}

	public String getConsulta(String pusuario, String psenha) {
		String s = "";
		try {
			PreparedStatement stmt = this.connection.prepareStatement("select * from t_professor where usuario=? and senha=?");
			stmt.setString(1, pusuario);
			stmt.setString(2, psenha);
			ResultSet rs = stmt.executeQuery();
			if (rs.next()) {
				Professor professor = new Professor();
				professor.setId_prof(rs.getLong("id_prof"));
				professor.setNome(rs.getString("nome"));
				professor.setUsuario(rs.getString("usuario"));
				professor.setSenha(rs.getString("senha"));
				professor.setCpf(rs.getString("cpf"));
				professor.setRg(rs.getString("rg"));
				professor.setCidade(rs.getInt("cidade"));
				professor.setAtivo(rs.getString("ativo"));
				professor.setSb_logado("sim");
				s = "Login efetuado com sucesso!";
			} else {
				s = "usuario não cadastrado!";
			}
		} catch (SQLException e) {
			return "deu erro";
		}
		return s;
	}
	
}

ServLet AdicionaContatoServlet

package servlets;

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 banco.Professor;
import banco.ProfessorDao;

public class AdicionaContatoServlet extends HttpServlet {/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

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 usuario = request.getParameter("usuario");
	String senha = request.getParameter("senha");
	String email = request.getParameter("email");
	String cpf = request.getParameter("cpf");
	String rg = request.getParameter("rg");
	String endereco = request.getParameter("endereco");
	//String cidade = request.getParameter("cidade");
	
	// monta um objeto contato
	Professor professor = new Professor();
	professor.setNome(nome);
	professor.setUsuario(usuario);
	professor.setSenha(senha);
	professor.setEmail(email);
	professor.setCpf(cpf);
	professor.setRg(rg);
	professor.setEndereco(endereco);
//	professor.setCidade(cidade);
	
	

	// salva o contato
	ProfessorDao dao = new ProfessorDao();
	dao.adiciona(professor);

	// imprime o nome do contato que foi adicionado
	out.println("<html>");
	out.println("<body>");
	out.println("Professor " + professor.getNome() + " adicionado com sucesso");
	out.println("</body>");
	out.println("</html>");
	}
	}

JSP Professor.jsp onde a a chamada da “adicionaContato”

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%if (session.getAttribute("logado")=="sim"){%>
	<%@include file="cadastro.jsp" %>
	<form action="adicionaContato" method="post">
		Nome: <input type="text" name="nome" /><br />
		Usuário: <input type="text" name="usuario" /><br />
		Senha: <input type="text" name="senha" /><br />
		E-mail: <input type="text" name="email" /><br />
		CPF: <input type="text" name="cpf" /><br />
		RG: <input type="text" name="rg" /><br />
		Endereço: <input type="text" name="endereco" /><br />
		<input type="submit" value="Gravar" />
	</form>

<%}else{%>
	<%@include file="menu.jsp" %>	
	<br>Efetue Login!<br>
<%} %>
</body>
</html>

Esta classe é a que mencionei que funciona corretamente executando com Run As --> Java Application e retorna as linhas:
ID: 2 Nome: ALEXANDRE DOS SANTOS ABREU Usuário: AABREU1969 Senha: kuka1969
ID: 3 Nome: ALDA TELES DOS REIS Usuário: ALDA Senha: atr1970

package banco;

import java.util.List;

public class TestaLista {
public static void main(String[] args) {
	ProfessorDao dao = new ProfessorDao();
	
	List<Professor> professores = dao.getLista();
	
	for (Professor professor : professores) {
		System.out.println("ID: " + professor.getId_prof() + " Nome: " + professor.getNome() + " Usuário: " + professor.getUsuario() + " Senha: " + professor.getSenha());
	}
}
}

fala ae champz,beleza? cara,se jogar na pasta lib não precissa add no build path não,derrepente está dando conflito porque ela está tanto na pasta lib quanto no build path,remove do build path e deixa só na pasta lib que o projeto vai reconhecer

Olá Slow17, primeiro, muito obrigado pela atenção!!!

fiz o que vc indicou, mas ocorre a mesma coisa…

[b]
type Exception report

message java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/dbsema

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/dbsema
banco.ConnectionFactory.getConnection(ConnectionFactory.java:13)
banco.ProfessorDao.(ProfessorDao.java:16)
servlets.AdicionaContatoServlet.service(AdicionaContatoServlet.java:47)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)

root cause

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/dbsema
java.sql.DriverManager.getConnection(Unknown Source)
java.sql.DriverManager.getConnection(Unknown Source)
banco.ConnectionFactory.getConnection(ConnectionFactory.java:11)
banco.ProfessorDao.(ProfessorDao.java:16)
servlets.AdicionaContatoServlet.service(AdicionaContatoServlet.java:47)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.47 logs.
[/b]

Se vc usar Class.forname() pra carregar??
Acho que isso n é usado atualmente, não tenho certeza :confused:

[quote=RodrigoKaos]Se vc usar Class.forname() pra carregar??
Acho que isso n é usado atualmente, não tenho certeza :confused:
[/quote]

Sempre que uso jdbc uso o Class.forname
talvez de te ajude.
Dá uma olhada em uma classe minha de conexão

[code]import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Conexao {
public static Connection getConnection() throws SQLException{
String url = “jdbc:mysql://127.0.0.1/MUSIC_FINDER”;
String login = “root”;
String senha = “root”;

	try{
		
		Class.forName("com.mysql.jdbc.Driver");
		return DriverManager.getConnection(url, login, senha);	
	}catch(ClassNotFoundException e){
		throw new SQLException(e.getMessage());
	}
	
}

}
[/code]

Slow17, cara… muito obrigado, deu certo!!!
O estranho é que na apostila cita que isso não é mais usado…
Obrigado também ao RodrigoKaos e a todos pela ajuda, agora vamos voltar a falar “javanês” !!!

Os drivers mais novos realmente não precisam do Class.forName() não. São os chamados “type 4”. Eles identificam o nome da classe por meio do mecanismo de SPI. Vai ver o que você ta usando é antigo.

Oi Rodrigo, eu estava usando o JAR mysql-connector-java-5.1.27-bin.jar

Como não uso MySQL não tenho ideia se esse driver é tipo 4 ou não (não é difícil de descobrir, se ele tiver um diretório “services” dentro do “META-INF”, deve ser).

Os drivers do PostgreSQL por exemplo já tem um “jdbc4” ou “jdbc3” no próprio nome do arquivo para sinalizar se é tipo 4 ou não. Exemplo: postgresql-8.4-703.jdbc4.

Mas o que importa é que você ja fez funcionar. Eu comentei mais a título de curiosidade/entendimento mesmo :slight_smile:

Abraço!

Eu estou exatamente com o mesmo problema, fiz o mesmo que você mas no meu caso não resolveu.

Criei classes de testes para testar a conexão, e inclusive meu DAO, rodando pelo jUnit funciona certinho, mas pelo tomcat não, estou usando o maven, com isso o jar do MySql já esta na WEB-INF/LIB, ja conferi o ClassPath, gogglei o dia todo, e não sei mais o que fazer. Alguém pode me ajudar?

Conector:

package br.com.tarefas.jdbc;

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

public class JdbcConection {
	public static Connection getConnection() throws SQLException{  
        String url = "jdbc:mysql://localhost/tarefas";  
        String login = "root";  
        String senha = "root";  
          
        try{  
              
            Class.forName("com.mysql.jdbc.Driver");  
            return DriverManager.getConnection(url, login, senha);    
        }catch(ClassNotFoundException e){  
            throw new SQLException(e.getMessage());  
        }  
          
    }
	
	/*public Connection getConnection() {
		try {
			return DriverManager.getConnection("jdbc:mysql://localhost/tarefas", "root", "root");
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}*/
}

Controller

package br.com.tarefas.controller;

import java.sql.SQLException;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import br.com.tarefas.dao.TarefaDao;
import br.com.tarefas.model.Tarefa;

@Controller
public class TarefasController {

	@RequestMapping("novaTarefa")
	public String form() {
		return "tarefa/formulario";
	}

	
	@RequestMapping("adicionaTarefa")
	  public String adiciona(Tarefa tarefa) throws SQLException {
		TarefaDao dao = new TarefaDao();
		dao.inserir(tarefa);
	    return "tarefa/adicionada";
	  }
	
}

Minha DAO

package br.com.tarefas.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.SimpleDateFormat;

import br.com.tarefas.jdbc.JdbcConection;
import br.com.tarefas.model.Tarefa;



public class TarefaDao {

	private Connection connection;

	public TarefaDao() throws SQLException {
		new JdbcConection();
		this.connection = JdbcConection.getConnection();
	}

	public boolean inserir(Tarefa tarefa) throws SQLException {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		
		String sql = "INSERT INTO tarefas (dataFinalizacao,descricao,finalizado) VALUES (?, ?, ?)";
		
		try {
			
			PreparedStatement stmt = this.connection.prepareStatement(sql);
			
			stmt.setString(1, sdf.format(tarefa.getDataFinalizacao().getTime()) );
			stmt.setString(2, tarefa.getDescricao());
			stmt.setBoolean(3, tarefa.isFinalizado());
			
			
			int rs = stmt.executeUpdate();
			
			stmt.close();
			
			if(rs >= 1){
				return true;
			}
			return false;
			
		} catch (SQLException e) {
			throw new SQLException();
		}
		
		
	}
}

Olá amigos, tudo bem? Sou um bebê em java, tive o mesmo problema, mas descobri que se estivermos usando o servidor Apache Tomcat 7 ou posterior, teremos que usar o Class.forName(“com.mysql.jdbc.Driver”). Espero ter ajudado.

Ola!

Tive o mesmo problema, segui as dicas deste post e também não resolveu.
Acabei encontrando a solução neste link: http://www.guj.com.br/11363-jsp-erro-ao-instanciar-o-dao.