Servlet lanca excecao ao tentar salvar dados

4 respostas
D

ola pessoal tenhu um problema que tento resolver ha uma semana, mas ate o momento sem solucao, eu consigo gravar dados usando uma "classe teste" que chama o medoto "dao.adiciona" porem chamar este msm metodo em um servlet o sistema lanca uma excessao NotClassFound

este codigo retorna uma conexao
package br.com.caelum.jdbc;

import java.sql.*;

public class ConnectionFactory {
        
        public Connection getConnection() throws ClassNotFoundException{
            
            System.out.println("conectando ao banco");
            try{
            	Class.forName("com.mysql.jdbc.Driver");  
                return DriverManager.getConnection("jdbc:mysql://localhost/fj21","root","root");
            }
            catch (SQLException e){
                 throw new RuntimeException(e);
            }
    
        }
}
este é o codigo para setar as variaveis que serao salvas no banco
package jdbc.modelo;

import java.util.Calendar;

public class Contato {
	
	private long id;
	private String nome;
	private String email;
	private String endereco;
	private Calendar dataNascimento;
	
	
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getEndereco() {
		return endereco;
	}
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}
	public Calendar getDataNascimento() {
		return dataNascimento;
	}
	public void setDataNascimento(Calendar dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

}
[color=orange]este codigo é onde estao os metodos de acesso ao banco de dados[/color]
package 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 jdbc.modelo.Contato;

import br.com.caelum.jdbc.ConnectionFactory;

public class ContatoDAO {
	private Connection connection;
	
	public ContatoDAO() throws ClassNotFoundException{
		this.connection=new ConnectionFactory().getConnection();
	}
	
	[color=orange]public void adiciona (Contato contato){[/color]
		String sql="insert into contatos (nome,email,endereco,dataNascimento) values (?,?,?,?)";
		try{
			PreparedStatement ps=connection.prepareStatement(sql);
			
			ps.setString(1, contato.getNome());
			ps.setString(2, contato.getEmail());
			ps.setString(3, contato.getEndereco());
			ps.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis() ));
			ps.execute();
			ps.close();
		}catch(SQLException e){
			throw new RuntimeException(e);
		}
	}
	public List<Contato> getLista(){
		try{
			List<Contato> contatos=new ArrayList<Contato>();
			PreparedStatement ps= this.connection.prepareStatement("select * from contatos");
			ResultSet rs=ps.executeQuery();
			
			while(rs.next()){
				Contato contato=new Contato();
				contato.setNome(rs.getString("nome"));
				contato.setEmail(rs.getString("email"));
				contato.setEndereco(rs.getString("endereco"));

				Calendar data=Calendar.getInstance();
				data.setTime(rs.getDate("dataNascimento"));
				contato.setDataNascimento(data);
				
				contatos.add(contato);
				}
			rs.close();
			ps.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 ps= connection.prepareStatement(sql);
			ps.setString(1, contato.getNome());
			ps.setString(2, contato.getEmail());
			ps.setString(3, contato.getEndereco());
			ps.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis()));
			ps.setLong(5, contato.getId());
			
			ps.execute();
			ps.close();
		}catch(SQLException e){
			throw new RuntimeException(e);
		}
	}
	public void remove(Contato contato){
		String sql="delete from contatos where id=?";
		try{
			PreparedStatement ps=connection.prepareStatement(sql);
			ps.setLong(1, contato.getId());
			ps.execute();
			ps.close();
		}catch(SQLException e){
			throw new RuntimeException(e);
		}
	}
}
[color=red]este é o sevlet que esta setando as variaveis[/color]
package servlet;
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;


import jdbc.dao.ContatoDAO;
import jdbc.modelo.Contato;

public class AddCttServlet extends HttpServlet{
	
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		PrintWriter out=resp.getWriter();
		
		String nome=req.getParameter("nome");
		String email=req.getParameter("email");
		String endereco=req.getParameter("endereco");
		
		
		String dataEmTexto=req.getParameter("dataNascimento");
		Calendar dataNascimento=null;
		
		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;
		}
		
		Contato contato=new Contato();
		contato.setNome(nome);
		contato.setEmail(email);
		contato.setEndereco(endereco);
		contato.setDataNascimento(dataNascimento);
		
		System.out.println(contato.getNome()+" "+contato.getEmail()+" "+contato.getEndereco()+" "+contato.getDataNascimento()); // apenas para conferir se estava setando os dados
		
		
		ContatoDAO dao;
		try {
			dao = new ContatoDAO();
			[color=red]dao.adiciona(contato);[/color]
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		out.println("<html>");
		out.println("<body>");
		out.println("Contato "+contato.getNome()+" adicionado com super sucesso");
		out.println("</body>");
		out.println("</html>");
	}
}

[color=red]ai aparece a excecao abaixo:[/color]

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:13)
	at jdbc.dao.ContatoDAO.<init>(ContatoDAO.java:44)
	at servlet.AddCttServlet.service(AddCttServlet.java:53)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)

4 Respostas

sandokandias

Amigo coloque o driver jdbc do MySQL em seu path.

D

eu ja adicionei o driver versao 5.1.14 e tentei tambem com a versao 5.0.4, e naum adiantou, eu consigo gravar dados no banco desde que nao seja pelo servlet :frowning:

sandokandias

seu driver está em WEB-INF/lib da sua app web?

D

sandokandias, era isso msm, o drive nao estava adicionado WEB-INF, agora deu certo, valeu :slight_smile:

Criado 8 de fevereiro de 2011
Ultima resposta 9 de fev. de 2011
Respostas 4
Participantes 2