Conexão com banco de dados

6 respostas
E

Boa tarde pessoas, estou com um problema mas acredito que não seja tão difícil de se resolver mas ainda não consegui encontrar qual é o problema, estou tentando inserir os dados de uma formulario em uma Tabela apartir de uma servlet usando jdbc, o mesmo exemplo da apostila da caelum, porém quando realizo o exercicio utilizando a servlet não conecta no banco da erro no método DriverManager.getConnection(....), eu já verifiquei a string de conexão e está correta, também verifiquei se o jar estava na pasta lib do projeto e se também estava adicionado no class path do projeto, e também está, pois caso não estivesse quando eu executasse o metodo main normal apenas para tetar a conexao tambem ocorreria um erro mas erro está ocorrendo apenas quando pego os dados do formulario atraves da minha servlet, segue o meu codigo logo abaixo junto com a descrição do erro:

java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21

package br.com.caelum.jdbc;

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/fj21","root","root");
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
		
	}
}
package br.com.caelum.agenda.servlet;

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

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

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 endereco = request.getParameter("endereco");
		String email = request.getParameter("email");
		String dataEmTexto = request.getParameter("dataNascimento");
		Calendar dataNascimento = null;
		
		// Fazendo conversao da data
		try {
			Date date = new SimpleDateFormat("dd/MM/yyyy").parse(dataEmTexto);
			dataNascimento = Calendar.getInstance();
			dataNascimento.setTime(date);
		}catch(ParseException e){
			out.println("Erro na conversao da data");
			return; // para a execucao do metodo
		}
		
		// Monta o objeto contato
		Contato contato = new Contato();
		contato.setNome(nome);
		contato.setEndereco(endereco);
		contato.setEmail(email);
		contato.setDataNascimento(dataNascimento);
		
		//Salva o contato
		ContatoDAO dao = new ContatoDAO();
		dao.adiciona(contato);
		
		//imprime o nome do contato que foi adicionado
		out.println("<html>");
		out.println("<body>");
		out.println("Contato " + contato.getNome() + " adicionado com sucesso");
		out.println("</body>");
		out.println("</html>");
	}
}
package br.com.caelum.jdbc.dao;

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

import br.com.caelum.jdbc.ConnectionFactory;
import br.com.caelum.jdbc.modelo.Contato;

public class ContatoDAO {
	private Connection connection;
	
	public ContatoDAO() {
		this.connection = new ConnectionFactory().getConnection();
	}
	
	public void adiciona(Contato contato){
		String sql = "insert into contatos (nome, email, endereco, dataNascimento) values (?,?,?,?)";
		
		try {
			PreparedStatement stmt = connection.prepareStatement(sql);
			
			stmt.setString(1, contato.getNome());
			stmt.setString(2, contato.getEmail());
			stmt.setString(3, contato.getEndereco());
			stmt.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis()));
			stmt.execute();
			stmt.close();
		}catch(SQLException e){
			throw new RuntimeException(e);
		}
	}
	
	public List<Contato> getLista() {
		List<Contato> contatos = new ArrayList<Contato>();
		try {
			
			PreparedStatement stmt = connection.prepareStatement("select * from contatos");
			ResultSet rs = stmt.executeQuery();
			while(rs.next()){
				// Criando Contato
				Contato contato = new Contato();
				contato.setNome(rs.getString("nome"));
				contato.setEmail(rs.getString("email"));
				contato.setEndereco(rs.getString("endereco"));
				
				//montando a data atraves do Calendar
				Calendar data = Calendar.getInstance();
				data.setTime(rs.getDate("dataNascimento"));
				contato.setDataNascimento(data);
				
				//adicionando o objeto a lista
				contatos.add(contato);				
			}
			rs.close();
			stmt.close();
			return contatos;
			
		}catch(SQLException e){
			throw new RuntimeException(e);
		}
	}
	
	public void altera(Contato contato){
		String sql = "update contatos set nome=?, email=?, endereco=?, dataNascimento=? where id=?";
		
		try {
			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.setString(1, contato.getNome());
			stmt.setString(2, contato.getEmail());
			stmt.setString(3, contato.getEndereco());
			stmt.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis()));
			stmt.setLong(5, contato.getId());
			
			stmt.execute();
			stmt.close();
		}catch(SQLException e){
			throw new RuntimeException(e);
		}
	}
	
	public void remove(Contato contato){
		try {
			PreparedStatement stmt = connection.prepareStatement("delete from contatos where id = ?");
			stmt.setLong(1, contato.getId());
			stmt.execute();
			stmt.close();
			System.out.println("Contato removido com sucesso");
		}catch(SQLException e){
			throw new RuntimeException(e);
		}
	}
}

6 Respostas

Hebert_Coelho

Vc adicionou o JAR ao buildpath? em qual pasta você colocou o jar?

E

coloquei o mysql_connector na pasta lib do meu projeto, e adicionei ele no build path, tanto é que nas classes normais de teste rodando direto pelo método main funciona normalmente, mas quando executo pelo Servlet da erro dizendo que desta vez não encontrou o Driver

Hebert_Coelho

Tenta adicionar então a lib na biblioteca do seu servidor. costumam ter uma pasta só com as libs.

E

Eu coloquei o jar mysql-connector-java-5.1.18-bin na pasta lib do tomcat e ainda continua o mesmo problema, existe alguma outro configuração que eu tenha que fazer ?

andreacerqueira

Elias vc conseguiu descobrir o problema? Eu tb estou tentando fazer esse exemplo da apostila da caelum mas não to conseguindo descobrir o pq do erro.
:frowning:

montanha007

Testa este!

package br.com.caelum.jdbc;

import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ConnectionFactory {
    static String banco_url = "jdbc:mysql://localhost:3306/fj21";
    static String banco_login = "root";
    static String banco_senha = "root";
    static Connection conexao = null;

    public static Connection getConnection() {
        try {
            Class.forName("org.gjt.mm.mysql.Driver");
            conexao = (Connection) DriverManager.getConnection(banco_url, banco_login, banco_senha);
            System.out.println("Conexao feita com sucesso!");
            return conexao;
        } catch (ClassNotFoundException e) {
            System.out.println("Driver para conexão não encontrado!");
        } catch (SQLException e) {
            System.out.println("Erro ao conectar ao banco, verifique usuário e senha");
        }
        return null;
    }

    public static void closeConnection(Connection conn,Statement stmt, ResultSet rs) throws Exception{
        close(conn, stmt, rs);
    }
    public static void closeConnection(Connection conn,Statement stmt) throws Exception{
        close(conn, stmt, null);
    }
    public static void closeConnection(Connection conn) throws Exception{
        close(conn, null, null);
    }

    private static void close(Connection conn, Statement stmt, ResultSet rs) throws Exception{
        if(rs!=null) try {
            rs.close();
        if(stmt!=null)
            rs.close();
        if(conn!=null)
            conn.close();
        } catch (Exception ex) {
            throw new Exception (ex.getMessage());
        }
    }

    public static void main(String[]args){
        getConnection();
    }
}
Criado 30 de março de 2012
Ultima resposta 9 de abr. de 2012
Respostas 6
Participantes 4