Erro ao adicionar cliente usando MVC

Boa tarde pessoa!!!

Estou com um pequeno problema no meu código…
É o seguinte tenho uma tela de cadastro de usuários onde é enviado para o meu servelet que resgata todos os dados blz
depois chama meu o meu Dao onde está minha conexão e onde é feita a conexão com o meu banco de dados e é
enserido o meu cliente no banco mas ao invez de inserir ele está caindo direto no Catch e da erro e mostra a mensagem (Não é possivel cadastrar)

Alguem pode me ajudar???

falo ate

cadastracliente.jsp

CadastraCliente.java



package Motel.actions;

import java.io.*;
import java.net.*;

import java.sql.SQLException;
import javax.servlet.*;
import javax.servlet.http.*;
import Motel.bean.ClienteBean;
import Motel.jdbc.dao.ClienteDao;

public class CadastraCliente extends HttpServlet {
    
    //Criando cliente     
    
    ClienteBean cliente = new ClienteBean();

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            out.println("<html>");
            out.println("<body>");

           String nome = request.getParameter("nome");
           String endereco = request.getParameter("end");
           String rg = request.getParameter("rg");
           String telefone = request.getParameter("tel");
           
      
           // Populando o ClienteBean
           cliente.setNome(nome);
           cliente.setEndereco(endereco);
           cliente.setTelefone(telefone);
           cliente.setCod_Rg(rg);
           
           // Chamando ClienteDao que contem conexao com o banco de dados
           ClienteDao dao = new ClienteDao();
           
           //Adicionando cliente no metodo adciona
           dao.adiciona(cliente); 
           
                out.println("Cliente Cadastrado com Sucesso ");

                    } catch (SQLException ex) {
                        out.println("Problemas ao inserir Cliente");
                        ex.printStackTrace();
                        out.close();
 
        } finally{
            
        } 
        out.println("</body>");
        out.println("</html>");
    } 


    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

 
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    
    public String getServletInfo() {
        return "Short description";
    }

}

ClienteDao.java




package Motel.jdbc.dao;

import Motel.bean.ClienteBean;
import Motel.conexao.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;


public class ClienteDao {
    
    private Connection connection;
    
    public ClienteDao(Connection con) {
		this.connection = con;
	}
    
    public ClienteDao() throws SQLException {
		this.connection = ConnectionFactory.getConnection();
	}
    
    
    public void adiciona(ClienteBean cliente) throws SQLException {

		// prepared statement para inser��o
		PreparedStatement stmt = this.connection.prepareStatement(
                    "insert into cadcliente (nome, endereco,telefone,rg) values (?, ?, ?, ?)");

		// seta os valores
		stmt.setString(1, cliente.getNome());
		stmt.setString(2, cliente.getEndereco());
                stmt.setString(3, cliente.getTelefone());
                stmt.setString(4, cliente.getCod_Rg());
                
		// executa
		stmt.executeUpdate();
		stmt.close();
	}
}

Conexão com o banco


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Motel.conexao;

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


public class ConnectionFactory {
	private static final String url = "jdbc:jtds:sqlserver://localhost:1433/MOTEL";
	private static final String driver = "net.sourceforge.jtds.jdbc.Driver";
	private static final String usuario = "sa";
	private static final String senha = "willian123";
	
	public static Connection getConnection() throws SQLException {
		try {
			Class.forName(driver);
			
			return DriverManager.getConnection(url, usuario, senha);
                            } catch (ClassNotFoundException e) {
                                e.printStackTrace();
                                throw new SQLException(e.getMessage());
                       
                            } 
         }
	
	public static void main(String[] args) {
		try {
			ConnectionFactory.getConnection();
                         System.out.println("Conectou ao banco");
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
}

vc esta inatncinado o obejto clienteDao mas nao esta passando uma conexao para ele

aqui vc instancia o dao:

ClienteDao dao = new ClienteDao();   

e em clienteDao vc tem um constructor que recebe uam conexao com parametro

public ClienteDao(Connection con) {   
        this.connection = con;   
    } 

e vc nao esta passando essa conexao

vc deve fazer tp:

ConnectionFactory cf = new ConnectionFactory();
ClienteDao dao = new ClienteDao(cf.getConnection());   
dao.adiciona(cliente);   

Obrigado Marcos
mas deu erro no dao.adiciona(cliente);

PQ?


 public ClienteDao(Connection con) {
		this.connection = con;
                ConnectionFactory cf = new ConnectionFactory();   
                ClienteDao dao = new ClienteDao(cf.getConnection());     
                dao.adiciona(cliente);
	}

este codigo que te passei deveria ficar na classe CadrastaCliente neh
e vc tem como colar o erro que aconteceu?

Me ajudem pessoal pq tenho que ser rápido para entregar isso amanhã e não sei o que ocorre
mudei o código agora, acho que assim fica mais facil… mas continua dando o mesmo erro ele cai no catch
e não da erro nenhum somente imprime “Erro ao adicionar cliente”




package Motel.jdbc.dao;

import Motel.bean.ClienteBean;
import Motel.conexao.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;


public class ClienteDao {
    
    private ClienteBean cliente;
    
    public void adiciona(ClienteBean cliente) throws SQLException {
        Connection con;
	PreparedStatement stm=null;
	try{  
		Class.forName("net.sourceforge.jtds.jdbc.Driver");
		con=DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/MOTEL",
                        "sa", "willian123");
                System.out.println("Conectado");
		stm=con.prepareStatement( "insert into TBCLIENTE (rg,nome,telefone,endereco) values " +
                        "(?, ?, ?, ?)");
                
            	// seta os valores
                stm.setString(1, cliente.getCod_Rg());
		stm.setString(2, cliente.getNome());
                stm.setString(3, cliente.getTelefone());
		stm.setString(4, cliente.getEndereco());
                
		// executa
		stm.executeUpdate();
		stm.close();
	
	}catch(ClassNotFoundException ex){
	    	System.out.println("Driver não encontrado");
	}catch(SQLException ex){
		System.out.println("Não foi possível se conectar com o banco de dados");
	}
	
     }

}

Dica coloca

catch (Exception e)

e manda da display da Exception

System.out.println(e);

pode ser que tenha algum cliente.getCod… nulll

ou até chave violada…

Mr. aquino.will,

Imprima o stack trace do exception pra gente dar uma olhada. Lá, onde vc colocou os catches escreva uma linha igual a esta aqui: System.out.println(ex.printStackTrace());

flws

Puts cara…

Agora pioro…
ele nem chama o Dao mais já cai no out.prinln (“Cliente cadastrado com sucesso”)
e não cadastra nada…

será que tenho que retornar o alguma coisa para o CadastraCliente ???

cola as suas classes de novo ai
para eu tentar colar aqui e ver se acho o erro com o eclipse

Value pessoal é que eu não manjo disso não
foi nos tutorial que peguei e alguns dicas de amigos que fiz esse código por isso estou mtio confuso


CadastraCliente.java

package Motel.actions;

import java.io.*;
import java.net.*;

import java.sql.SQLException;
import javax.servlet.*;
import javax.servlet.http.*;
import Motel.bean.ClienteBean;
import Motel.jdbc.dao.ClienteDao;

public class CadastraCliente extends HttpServlet {
    
    //Criando cliente     
    
    ClienteBean cliente = new ClienteBean();

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            out.println("<html>");
            out.println("<body>");

           String nome = request.getParameter("nome");
           String endereco = request.getParameter("end");
           String rg = request.getParameter("rg");
           String telefone = request.getParameter("tel");
           
           // Populando o ClienteBean
           cliente.setCod_Rg(rg);
           cliente.setNome(nome);
           cliente.setTelefone(telefone);
           cliente.setEndereco(endereco);
                
           // Chamando ClienteDao que contem conexao com o banco de dados
           ClienteDao dao = new ClienteDao();
           
           //Adicionando cliente no metodo adciona
           dao.adiciona(cliente);            
           out.println("Cliente Cadastrado com Sucesso ");

        } catch (SQLException ex) {
               out.println(ex);
               ex.printStackTrace();
            
 

               out.close();
 
        } finally{
            
        } 
        out.println("</body>");
        out.println("</html>");
    } 

    // <editor-fold defaultstate="collapsed" desc="Métodos HttpServlet. Clique no sinal de + à esquerda para editar o código.">
    /** 
    * Handles the HTTP <code>GET</code> method.
    * @param request servlet request
    * @param response servlet response
    */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    /** 
    * Handles the HTTP <code>POST</code> method.
    * @param request servlet request
    * @param response servlet response
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
    * Returns a short description of the servlet.
    */
    public String getServletInfo() {
        return "Short description";
    }
    // </editor-fold>
}

ClienteBean

package Motel.bean;

public class ClienteBean {
	private String Cod_Rg;
	private String Nome;
	private String Telefone;
        private String Endereco;
	
	public String getCod_Rg (){
		return Cod_Rg;
	}
	public void setCod_Rg (String Cod_Rg){
		this.Cod_Rg = Cod_Rg;
	}
	public String getNome (){
		return Nome;
	}
	public void setNome (String Nome){
		this.Nome = Nome;
	}
	public String getTelefone(){
		return Telefone;
	}
	public void setTelefone (String Telefone){
		this.Telefone = Telefone;
	}
        public String getEndereco(){
		return Endereco;
	}
	public void setEndereco (String Endereco){
		this.Endereco = Endereco;
	}
}

ClienteDao

package Motel.jdbc.dao;

import Motel.bean.ClienteBean;
import Motel.conexao.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;


public class ClienteDao {
    
    private ClienteBean cliente;
    
    public void adiciona(ClienteBean cliente) throws SQLException {
        Connection con;
	PreparedStatement stm=null;
	try{  
            Class.forName("net.sourceforge.jtds.jdbc.Driver");
	    con=DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/MOTEL","sa", "willian123");
            System.out.println("Conectado");
	    stm=con.prepareStatement( "insert into TBCLIENTE (rg,nome,telefone,endereco) values " +
                        "(?, ?, ?, ?)");
                
            	// seta os valores
                stm.setString(1, cliente.getCod_Rg());
		stm.setString(2, cliente.getNome());
                stm.setString(3, cliente.getTelefone());
		stm.setString(4, cliente.getEndereco());
                
		// executa
		stm.executeUpdate();
		stm.close();
	
	}catch(ClassNotFoundException ex){
	    	System.out.println("Driver não encontrado");
	}catch(SQLException ex){
		System.out.println("Não foi possível se conectar com o banco de dados");
	}
	
     }

}

cara cola a classe que vc esta fazendo a conexao com o banco tb paa eu dar uma olhada

Mano eu exlui aquela classe e coloquei tudo no Dao acho que assim fica mais facil

bem mudei uns negocinhos vamos ver se funciona ai

primeiro crie uma classe para abrir a conexao com o banco de dados, segue o codigo abaixo:

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

public class Conexao {
    public Connection obterConexao() {
        Connection con = null;
        try {
            Class.forName("net.sourceforge.jtds.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/MOTEL",
                                              "sa",
                                              "willian123");
            System.out.println("Conectado");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return con;
    }
}

recomendo que bote um metodo main nessa classe e teste o metodo obterConexao, se ele imprimir conectou no console a conexao esta funcionando.

depois a classe ClienteDao ficaria assim:

import trabalho.ClienteBean;   
import java.sql.Connection;   
import java.sql.PreparedStatement;   
import java.sql.SQLException;   
import java.sql.Connection;   
import java.sql.DriverManager;   
import java.sql.ResultSet;   
import java.sql.SQLException;   
  
  
public class ClienteDao {    
       
    public void adiciona(ClienteBean cliente) throws SQLException {   
        try{
            Conexao conexao = new Conexao();
            PreparedStatement pst = conexao.obterConexao().prepareStatement(
                "insert into TBCLIENTE (rg,nome,telefone,endereco) values (?, ?, ?, ?)");   
            pst.setString(1, cliente.getCod_Rg());
            pst.setString(2, cliente.getNome()); 
            pst.setString(3, cliente.getTelefone()); 
            pst.setString(4, cliente.getEndereco());  

            pst.execute();
          
            }catch(SQLException e){
                //con.rollback();
                throw e;
            }
       
     }   
  
}  

OBS.: Pode da erro na declaraco dos imports la em cima pq os pacotes aqui que fiz tavam com outros nomes, é so mudar la dai.

ai o clienteBean e o cadastraCliente ficaria igual no caso, tente usar isso que to te passando e ve se da algum resultado.

lembrando que é bom vc botar um brakpoint dentro da funcao adiciona e ver se os valores ali rg, cpf, nome,… realmente nao tao vindo nulos, que eles tao com algum valor e tb que sua tabela la ta criada corretamente, com o mesmo nome que vc ta botando ali no insert e tal

Tem mais essa dica aqui ó:

Dentro do package trabalho crie esta classe de teste e execute.

[code]import Motel.bean.ClienteBean;
import Motel.jdbc.dao;

public class Teste {

public static void main(String[] args ) {

	ClienteBean clienteBean = new ClienteBean();

            clientBean.setNome("BERNADETE");
	clientBean.setCod_Rg("123456789");
	clientBean.setTelefone("999-9999");
	clientBean.setEndereco("Rua da Alegria, 69");

	ClienteDao clienteDao = new ClienteDao();

	try {
		clienteDao.adiciona( clienteBean ); 
	} catch( SQLException e ) {
		System.out.println(e.printStackTrace());
            }
}

}
[/code]

A pilha de erros deve aparecer na aba Console.

P.S Se estiver utilizando o Eclipse execute como aplicação: Clicar com o botão direito do mouse em cima da classe e entrar nas opções Run As / Java Application.

flws

Desconsidere o código anterior e considere este aqui:

[code]
import Motel.bean.ClienteBean;
import Motel.jdbc.dao;

public class Teste {

public static void main(String[] args ) {

	ClienteBean clienteBean = new ClienteBean();

            clientBean.setNome("BERNADETE");
	clientBean.setCod_Rg("123456789");
	clientBean.setTelefone("999-9999");
	clientBean.setEndereco("Rua da Alegria, 69");

	ClienteDao clienteDao = new ClienteDao();

	try {
		clienteDao.adiciona( clientBean ); // <-------<<<< ALTEREI AQUI
	} catch( SQLException e ) {
		System.out.println(e.printStackTrace());
            }
}

}[/code]

eh esqueci de cita isso
isso que o fantomas falo é mto util
assim vc sabera se esta funcionando sua conexao
se vc fizer isso que ele falo e inserir que dizer que a conexao ta indo certa
ai se der algum erro depois qdo for rodar mesmo entao significa que o erro ta qdo vc ta pegando as informacoes atraves do servlet

Obrigado amigos!!!
valeu mesmo
estou testando agora isso que vcs falaram
e jaja volta aqui se deru algum erro ao para informar que correu tudo bem

Mais uma vez meus MUITO OBRIGADO!!!

sem problemas
todo mundo passa por isso
disponha

Voltei!!!

Então… deu erro denovo e no obterConexao();

O NetBeans não deixa que eu use esse metodo PQ? Tenho que adicionar ele nas bibliotecas ou nem?
E mais uma pergunta na minha tabela os campos estão todos em maiusculos
então no meu insert fica assim?

“insert into TBCLIENTE (COD_RG,NOME,TELEFONE,ENDEREO) values (?, ?, ?, ?)”);


package Motel.jdbc.dao;   
  
import Motel.bean.ClienteBean;   
import Motel.conexao.Conexao; 
import java.sql.Connection;   
import java.sql.PreparedStatement;   
import java.sql.SQLException;   
  
  
public class ClienteDao {       
         
    public void adiciona(ClienteBean cliente) throws SQLException {     
        try{   
            Conexao conexao = new Conexao();   
            PreparedStatement pst = conexao.obterConexao().prepareStatement(   
                "insert into TBCLIENTE (COD_RG,NOME,TELEFONE,ENDEREO) values (?, ?, ?, ?)");     
            pst.setString(1, cliente.getCod_Rg());   
            pst.setString(2, cliente.getNome());   
            pst.setString(3, cliente.getTelefone());   
            pst.setString(4, cliente.getEndereco());     
  
            pst.execute();   
             
            }catch(SQLException e){   
                //con.rollback();   
                throw e;   
            }   
         
     }     
     
}