[RESOLVIDO] Erro ao Gravar um Contato

7 respostas
BtAquino

Estou fazendo o exercício da FJ21

5.9 - Exercícios: Criando funcionalidade para gravar contatos

E aconteceu o seguinte erro, ao tentar gravar um contato.

exception

java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost/ProjetoWEB
dao.FabricaDeConexao.getConnection(FabricaDeConexao.java:14)
dao.ContatoDAO.(ContatoDAO.java:17)
br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:53)

root cause

java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost/ProjetoWEB
java.sql.DriverManager.getConnection(DriverManager.java:640)
java.sql.DriverManager.getConnection(DriverManager.java:200)
dao.FabricaDeConexao.getConnection(FabricaDeConexao.java:12)
dao.ContatoDAO.(ContatoDAO.java:17)
br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:53)

Fabrica de Conexão:

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

public class FabricaDeConexao {
	
	public Connection getConnection(){
		System.out.println("Conectando ao Banco de Dados");
		try{
			return DriverManager.getConnection("jdbc:postgresql://localhost/ProjetoWEB","postgres","9999");
		}catch (SQLException e) {
			throw new RuntimeException(e);
		}
		
	}

}

Classe ContatoDAO:

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

import br.com.caelum.jdbc.Contato;

public class ContatoDAO {
	
	private Connection conectar;
	/*
	 * Construtor da Classe
	 */
	public ContatoDAO(){
		this.conectar = new FabricaDeConexao().getConnection();
	}
	
	public void adiciona(Contato contato){
		String sql = "insert into Contatos (nome, endereco, email, dataNascimento) values (?,?,?,?)";
		try{
			PreparedStatement stmt = conectar.prepareStatement(sql);
			stmt.setString(1, contato.getNome());
			stmt.setString(2, contato.getEndereco());
			stmt.setString(3, contato.getEmail());
			stmt.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis()));
			
			
			
			stmt.execute();
			stmt.close();
		}catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}

}

Eu coloquei o driver do postgres na pasta lib do projeto, e depois fui em Build Pach e add o driver. Este mesmo Drive funcionou em uma aplicação java básica, mas no WEB aconteceu o erro relatado.

Alguém pode me ajuda?

Grato.

7 Respostas

BtAquino

Tentei colocar a Porta também na fabrica de conexão, mas não adiantou.

BtAquino

Peguei as duas classe e inclui em um projeto de Java Básico, e gravou normal no banco de dados. Mas no ProjetoWEB da o erro relatado.

mauricioadl

tenta nao inserir ele no build path, em aplicações web basta apenas copiar o driver para a pasta lib.

[]'s

BtAquino

Fiz um novo projeto, desta vez apenas coloquei o .Jar na pasta WebContent/WEB-INF/lib

E o erro continua:

exception

java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost/Locadora
	fabrica.FabricaDeConexao.getcoConnection(FabricaDeConexao.java:13)
	dao.CidadeDAO.<init>(CidadeDAO.java:16)
	br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:35)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost/Locadora
	java.sql.DriverManager.getConnection(DriverManager.java:640)
	java.sql.DriverManager.getConnection(DriverManager.java:200)
	fabrica.FabricaDeConexao.getcoConnection(FabricaDeConexao.java:11)
	dao.CidadeDAO.<init>(CidadeDAO.java:16)
	br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:35)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
mauricioadl

sei q isso nao eh mais necessario, mas tente colocar pra ver
Class.forName(“org.postgresql.Driver”);

[]'s

BtAquino

Caramba, deu certo!

Mas estou usando o JDBC 4, e segundo Apostila não era mais necessário utilizar este recurso.

A classe ficou assim:

package fabrica;

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

public class FabricaDeConexao {
	
	public Connection getcoConnection(){
		try {
			try {
				Class.forName("org.postgresql.Driver");
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
			return DriverManager.getConnection("jdbc:postgresql://localhost/Locadora","postgres","2504");
		} catch (SQLException e) {
			throw new RuntimeException(e);
	
		}
	}

}

E estou usando este Driver postgresql-9.1-901.jdbc4.jar

mauricioadl

eu sempro uso o classforname, assim nunca corro o risco de bater cabeça a toa.

[]'s

coloca resolvido no topico

Criado 8 de março de 2012
Ultima resposta 8 de mar. de 2012
Respostas 7
Participantes 2