Exercicio 5.9 da apostila fj-21 caelum

boa noite

estou com um problema…

estou tentando fazer o exercicio da apostila da caelum e parece o problema ser com o mysql

pois quando eu salvo dentro de um arraylist funciona corretamente

classe de conexão

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

public class Conexao {
	
	public Connection fabricaConexao() {

		final String url = "jdbc:mysql://localhost:3306/pessoa";
		String user = "root";
		String password = "root";

		try {
			return DriverManager.getConnection(url, user, password);
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
}

classe DAO

package servlet;

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

public class PessoaDAO {

	private Connection conexao = null;

	public void adicionar(Pessoa pessoa) throws SQLException {

		try {

			conexao = new Conexao().fabricaConexao();
			String sql = "INSERT INTO PESSOA (nome, email, endereco, dataNascimento) VALUES (?,?,?,?)";

			PreparedStatement ps = conexao.prepareStatement(sql);
			ps.setString(1, pessoa.getNome());
			ps.setString(2, pessoa.getEmail());
			ps.setString(3, pessoa.getEndereco());
			ps.setDate(4, new Date(pessoa.getDataNascimento().getTimeInMillis()));
			
			ps.execute();
			ps.close();

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			//conexao.close();
		}

	}

}

Ele gera este erro quando a conexao.close esta comentada

type Exception report

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

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:3306/pessoa
	servlet.Conexao.fabricaConexao(Conexao.java:18)
	servlet.PessoaDAO.adicionar(PessoaDAO.java:16)
	servlet.AdicionaPessoa.service(AdicionaPessoa.java:50)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
root cause

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/pessoa
	java.sql.DriverManager.getConnection(Unknown Source)
	java.sql.DriverManager.getConnection(Unknown Source)
	servlet.Conexao.fabricaConexao(Conexao.java:16)
	servlet.PessoaDAO.adicionar(PessoaDAO.java:16)
	servlet.AdicionaPessoa.service(AdicionaPessoa.java:50)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.34 logs.

Eu já coloquei a o driver mysql na pasta lib e também adicionar na library

quando conexao.close nao esta comentado gera este erro

type Exception report

message

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

exception

java.lang.NullPointerException
	servlet.PessoaDAO.adicionar(PessoaDAO.java:31)
	servlet.AdicionaPessoa.service(AdicionaPessoa.java:50)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.34 logs.

O que pode estar ocorrendo?

você precisa adicionar o jar do driver do mysql no seu buildpath, coloca ele dentro da pasta lib do seu projeto e adiciona a referencia no buildpath.

cara não deu!!!

o que poderia ser além disso?

faz assim na classe Conexao

coloca essa linha no inicio do metodo fabricaConexao()

Class.forName(“com.mysql.jdbc.Driver”);

e ve se muda alguma coisa.

[quote=DaniloAndrade]faz assim na classe Conexao

coloca essa linha no inicio do metodo fabricaConexao()

Class.forName(“com.mysql.jdbc.Driver”);

e ve se muda alguma coisa.

[/quote]

Cara deu certo, mas na apostila da Caelum la diz, que isso era necessário para drivers JDBC mais antigos

Eu uso mysql_conector_5 e java 7 em minha máquina…

Alguém saberia me explicar o porque?

Obrigado

pode ser que vc tenha criado sua aplicação pra uma versão mais antiga do java.

exemplo:
vc tem o jdk 7 instalado, mas quando foi criar a aplicação vc colocou j2SE 1.5 ou anterior

mas isso é so uma suposição

[quote=DaniloAndrade]pode ser que vc tenha criado sua aplicação pra uma versão mais antiga do java.

exemplo:
vc tem o jdk 7 instalado, mas quando foi criar a aplicação vc colocou j2SE 1.5 ou anterior

mas isso é so uma suposição[/quote]

verifiquei no projeto esta 1.7

[quote=DaniloAndrade]pode ser que vc tenha criado sua aplicação pra uma versão mais antiga do java.

exemplo:
vc tem o jdk 7 instalado, mas quando foi criar a aplicação vc colocou j2SE 1.5 ou anterior

mas isso é so uma suposição[/quote]

É bem provável pois do Java 6 pra frente, o driver não precisa mais ser carregado.