Erro Java EE com MySQL - FJ-21 [RESOLVIDO]

Olá Galera,

Estou com um erro no meu programa e já tentei resolver de varias maneiras sem exito. Estou estudando e não conheço muito ainda de Java EE. Criei minha pagina web, meu servlet e minha conexão com o banco. Quando preencho o formulario na web e clico em gravar ele me retorna um erro que não acho um driver jdbc, porém criei um class que faz o mesmo insert da WEB mas não executo ela via web e ela funciona chamando a mesma conexão com o banco. Alguém poderia dar um dica para tentar resolver o problema ? Obrigado !!!

Dados:

TomCat 7;
MySQL;
Connector eu peguei no site do MySQL para TomCat 7.

Erro:

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/db_jdbc
br.com.anderson.conexao.ConnectionFactory.getConnection(ConnectionFactory.java:22)
br.com.anderson.conexao.ContatoDAO.(ContatoDAO.java:17)
br.com.anderson.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:60)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

root cause

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/db_jdbc
java.sql.DriverManager.getConnection(DriverManager.java:604)
java.sql.DriverManager.getConnection(DriverManager.java:221)
br.com.anderson.conexao.ConnectionFactory.getConnection(ConnectionFactory.java:15)
br.com.anderson.conexao.ContatoDAO.(ContatoDAO.java:17)
br.com.anderson.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:60)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

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

Codigos Fonte:

ConnectionFactory

package br.com.anderson.conexao;

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

public class ConnectionFactory {

	public Connection getConnection() {

		System.out.println("Conectando ao banco de dados...");

		try {

			return DriverManager.getConnection(
					"jdbc:mysql://localhost/db_jdbc", "root", "password");

		} catch (SQLException e) {

			System.out.println("Erro ao conectar no banco de dados !");
			System.out.println("Erro SQL:" + e);
			throw new RuntimeException(e);
		}

	}

}

ContatoDAO

package br.com.anderson.conexao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.SQLException;


import br.com.anderson.modelo.Contato;

public class ContatoDAO {

	private Connection connection;

	public ContatoDAO() {

		this.connection = new ConnectionFactory().getConnection();

	}

	public void setAdiciona(Contato contato) throws SQLException {

		try {

			// Cria um preparedStatement
			String sql = "insert into tb_contatos (nm_contato,email_contato,end_contato,data_contato) values (?,?,?,?)";
			PreparedStatement stmt = this.connection.prepareStatement(sql);

			// Preenche os valores
			stmt.setString(1, contato.getNome());
			stmt.setString(2, contato.getEmail());
			stmt.setString(3, contato.getEndereco());
			stmt.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis()));

			// Executa comando
			stmt.execute();
			stmt.close();

		} catch (Exception e) {
			System.out.println("Erro ao executar o ContatoDAO");
			throw new RuntimeException(e);

		} finally {

			this.connection.close();

		}
	}

}

AdicionaContatoServlet

package br.com.anderson.servlet;
import br.com.anderson.conexao.ContatoDAO;
import br.com.anderson.modelo.Contato;

import java.io.IOException;
import java.io.PrintWriter;
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;



public class AdicionaContatoServlet extends HttpServlet {

	@Override
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub

		// Pega os parametros da pagina em html

		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;

		// Converte a data em Calendar

		try {
			Date date = new SimpleDateFormat("dd/MM/yyyy").parse(dataEmtexto);
			dataNascimento = Calendar.getInstance();
			dataNascimento.setTime(date);
		} catch (ParseException e) {

			out.println("Erro na conversao !!!");
			return;

		}

		// Monta um objeto do tipo contato

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

		// Cria um Contato na DB atraves da ContatoDAO

		ContatoDAO db = new ContatoDAO();
		try {
			db.setAdiciona(contato);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		// gera pagina html com o nome do contato adicionado
		out.println("<html>");
		out.println("<body>");
		out.println("Contato " + contato.getNome() + contato.getNome()
				+ " adicionado com sucesso");
		out.println("</body>");
		out.println("</html>");

		// super.service(resquest, response);
	}

}

ExecInser ( CLasse que criei para testar a conexão do banco ( ContatoDAO))

package br.com.anderson.servlet;


import java.sql.SQLException;
import java.util.Calendar;

import br.com.anderson.conexao.ContatoDAO;
import br.com.anderson.modelo.Contato;


public class ExecInsert {

	/**
	 * @param args
	 * @throws SQLException
	 */
	public static void main(String[] args) throws SQLException {
		// TODO Auto-generated method stub
		
		// Cria Contato
		
		Calendar c = Calendar.getInstance();
		c.set(2012, 04, 30,15,50,00);
		
		
		Contato contato = new Contato();
		
		
		contato.setNome("Maiara Lopes");
		contato.setEndereco("mlopes");
		contato.setEmail("1234");
		contato.setDataNascimento(c);
		
				
		ContatoDAO db = new ContatoDAO();
		
		db.setAdiciona(contato);
		
		
					
		System.out.println("Comando executado com sucesso !!!");

		


	}

}

Caso necessário mais informações me falem que eu posto !!! Obrigadooo !!!

Existe cópia do Driver do banco na pasta lib do WEB-INF do projeto??

Se vc estiver usando o Eclipse, é algo assim: Tem o seu projeto, e dentro dele tem uma pasta WebContent. Dentro dela, tem a pasta WEB-INF, e dentro dessa tem uma pasta lib. Tenta copiar o Driver dentro dessa pasta. Creio que é este o problema.

Veja se é isso mesmo e conta pra gente o que ocorre.

[]'s

DoomGuy Vlw pela ajuda, mas o problema ainda continua o mesmo --’.

Removi o connector do Build Patch do eclipse. Copiei o connector na pasta \WebContent\WEB-INF\lib, adicionei novamente no Build Patch a partir desse diretório e reiniciei o eclipse. Porém o erro continua iglauzinho. Quando tento fazer pela WEB ele apresenta erro de driver, quando utilizo uma classe de teste chamando a mesma conexão com o banco que a classe da web chama funciona !

Olá Galera !!!

Mesmo após deixar minha duvida aqui, continue pesquisando… Encontrei na net o comando :

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

Coloquei ele no meu código e funcionou perfeitamente !!!

O código ficou assim :


package br.com.anderson.conexao;

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 {

			DriverManager.registerDriver(new com.mysql.jdbc.Driver());
			return DriverManager.getConnection(
					"jdbc:mysql://localhost/db_jdbc", "root", "password");
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException(e);

		}

	}
}

Porém como ainda estou estudando, não entendi muito bem porque funcionou !!! Alguém poderia me explicar ? Obrigado !!!

A úncia coisa que consigo pensar, e não tenho certeza de que está certa, é o tomcat utilizado. Se não me engano, em alguns tinha que chamar o Class.forName(“com.mysql.jdbc.Driver”); pra funcionar. Mas não sei se é isso. Eu uso o Tomcat 6 aqui em casa, com o Java 1.6, e fiz o return DriverManager.getConnection e não apareceu nenhum erro. Vamos ver alguém mais experiente aparecer pra sanar nossas dúvidas.