Erro de inserção/consulta no banco MySQL

6 respostas
somma

Boa noite pessoal!!!

Este código faz uma verificação no banco antes de cadastrar algum usuário.

O problema é:

Eu já testei a consulta e o insert separados e ambos funcionam!!!!!!!!!!

Quando eu monto a estrutura no if(){} eu pergunto se o cpf consta no banco se não constar ele passa para o else{} e cadastra os dados.

Teoricamente era para fazer isso, mas infelizmente não acontece.

Segue o bendito:

public class CadPessoal extends HttpServlet {
    
    Conexao conexao = new Conexao();
     
     public void init(){
         try {
             conexao.getConnection();
             System.out.println("*************OK!!!!");
         } catch (SQLException ex){
             ex.printStackTrace();
             System.out.println("Error de conexão "+ex);
         }catch (Exception e){
             System.out.println("Falha ao carregar driver.");
             return;
         }
     }
    
    String cadSucesso = "www/profissional/cadastrar/sucesso.jsp";
    String cadError = "www/profissional/cadastrar/pageError.jsp";
    
    CadastreStaff c1 = new CadastreStaff(); 

    int cd_identificacao = 0;
    String nm_cliente = "";
    String ds_endereco = "";
    int nr_endereco = 0;
    int nr_complemento = 0;
    String ds_bairro = "";
    String ds_cidade = "";
    String ds_estado = "";
    int nr_telefone = 0;
    int nr_celular = 0;
    int nr_rg = 0;
    String nr_cpf = "";
    String ds_estado_civil = "";
    String ds_sexo = "";
    String ds_email = "";
    int nr_cep = 0;
    String ic_filhos = "";
    int nr_filhos = 0;
    String nm_conjuge = "";
    String ds_area_interesse = "";
    String ds_naturalidade = "";
    String ds_nacionalidade = "";
 
                
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException{
        
    }
    
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException{
        
        c1.setCliente(request.getParameter("ds_Nome"));
        c1.setEndereco(request.getParameter("ds_Endereco"));
        c1.setNumeroEndereco(Integer.parseInt(request.getParameter("nr_Numero")));

        c1.setBairro(request.getParameter("ds_Bairro"));
        c1.setCidade(request.getParameter("ds_Cidade"));
        c1.setEstado(request.getParameter("ds_Estado"));
        c1.setTelefone(Integer.parseInt(request.getParameter("nr_Telefone")));
        c1.setCelular(Integer.parseInt(request.getParameter("nr_Celular")));
        c1.setRg(Integer.parseInt(request.getParameter("nr_RG")));
        c1.setCpf(request.getParameter("nr_CPF"));
        c1.setEstadoCivil(request.getParameter("ds_EstadoCivil"));
        c1.setSexo(request.getParameter("ds_Sexo"));
        c1.setEmail(request.getParameter("ds_Email"));
        c1.setCep(Integer.parseInt(request.getParameter("nr_Cep")));
        c1.setFilhos(request.getParameter("temFilho"));
        c1.setAreaInteresse(request.getParameter("ds_AreaInteresse"));
        
        
      //Declaração que trata comando SQL
        PreparedStatement statement = null;
        ResultSet rs = null;
        String consulta = "SELECT nr_cpf FROM tbl_dados_pessoais WHERE nr_cpf = ? ";
        String inserir = "INSERT INTO tbl_dados_pessoais(nm_cliente, ds_endereco, nr_endereco," +
                             "ds_bairro, ds_cidade, ds_estado, nr_telefone, nr_celular, nr_rg, nr_cpf, ds_estado_civil, ds_sexo," +
                             "ds_email, nr_cep, ic_filhos, ds_area_interesse) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
        
          try{
              
              Connection con = conexao.getConnection();
              
              statement = con.prepareStatement(consulta);
              statement.setString(1,c1.getCpf());              
              rs = statement.executeQuery();
              
              if(rs.next()){

                 if(c1.getCpf().equals(rs.getString(1))){
                      
                    response.sendRedirect(cadError);

                 }else{
                     
                     statement = con.prepareStatement(inserir);
                     
                     statement.setString(1,c1.getCliente());
                     statement.setString(2,c1.getEndereco());
                     statement.setInt(3,c1.getNumeroEndereco());
                     statement.setString(4,c1.getBairro());
                     statement.setString(5,c1.getCidade());
                     statement.setString(6,c1.getEstado());
                     statement.setInt(7,c1.getTelefone());
                     statement.setInt(8,c1.getCelular());
                     statement.setInt(9,c1.getRg());
                     statement.setString(10,c1.getCpf());
                     statement.setString(11,c1.getEstadoCivil());
                     statement.setString(12,c1.getSexo());
                     statement.setString(13,c1.getEmail());
                     statement.setInt(14,c1.getCep());
                     statement.setString(15,c1.getFilhos());
                     statement.setString(16,c1.getAreaInteresse());


                     statement.executeUpdate();
                     response.sendRedirect(cadSucesso);
                 }
             }
             
                conexao.fechaStatement(statement);
                conexao.fechaResultSet(rs);
                conexao.fechaConexao(con);  
                
          }catch(SQLException e){
             e.printStackTrace();
             System.out.println(e.toString());  
          }
          catch(Exception e){
             System.out.println(e.toString());              
          }
          
    }
 
}

Mais uma dúvida:
- Quando eu estou fazendo a captura dos dados sempre dá erro quando o usuário deixa algum campo do tipo inteiro sem preencher!!!!!! Existe alguma forma de tratamento para este problema???? porque não é elegante o código de erro estourar na tela do usuário..

Muito obrigado

6 Respostas

M

bem pra começar o seu banco de dados foi mal projetado isso ja se faz no banco em vez de vc ficar igual doido heheheh se afogando em codigos mude faça alteração na tabela

existe um comando chamado unique “unico” q nao permiti cadastrar um cpf ja cadastrado tu tem que mudar o campo na table exemplo

create table pessoa(
id int auto_increment,
nome varchar(100),
cpf int unique,
primary key(id));

pronto sempre que vc for cadastrar uma pessoa cujo o cpf ja esta cadastrado ele vai mandar um exeção e so vc por a mensagem pessoa ja cadastrada :slight_smile: note: que eu pus ele como int so pra mostrar como alterar abaixo segue o comando:

alter table pessoa modify cpf varchar(50) unique;

georgesq

isso vc deve deixar que o banco gerencie, crie indice único, ou se for o caso o cpf seja PK, daí vc manda insert, se der Exception, ele existe :slight_smile:

[s]
baiano

nadilsons

Nao deixe para o banco responsabilidade inerentes a regras de negocio… deve acontecer que o cpf que vc usa para o select estar diferente do que estah no banco… verifique espacos… zeros…

if(rs.next()){
 
                  if(c1.getCpf().equals(rs.getString(1))){

Vi este codigo de relance… mas ele nao me fez muito sentido… pq se o resultSet vem com algum registro… o cpf existe no banco… e talvez esteja ai o erro

Em relacao

O erro acontece nestes fragmentos de codigo (que nao sao poucos…)

c1.setTelefone(Integer.parseInt(request.getParameter("nr_Telefone")));
         c1.setCelular(Integer.parseInt(request.getParameter("nr_Celular")));
         c1.setRg(Integer.parseInt(request.getParameter("nr_RG")));

O que vc tenta fazer eh transformar[color=red] “” [/color]em um inteiro… e sabemos que isto nao eh possivel.

Pedrosa

Uma dica, retire esses acessos ao banco da Servlet, mova para uma classe DAO, quando você tenta dar um parseInt precisa assegurar se realmente veio conteúdo no request.getParameter.

Uma coisa que torna o trabalho sofrível também e ter que fazer todos os requests do form, existem frameworks que podem te ajudar no desenvolvimento:

VRaptor
http://www.vraptor.org/pt/request/index.html

somma

Pessoal,

Muito obrigado pelas informações,

Referente ao banco de dados não sou eu que estou modelando!!!

Referente a aplicação eu vou estudar as dicas passadas para aprimorar o código!!!

E falando de ‘framework’ eu já estou estudando Struts o que se passa é que esse projeto está em cima da hora e estou tentando fazer do jeito que tenho mais facilidade, provavelmente está codificação que está sendo feita mudará futuramente.

Obrigado

somma

Mais uma coisinha pessoal…

Eu tenho bons conhecimentes em JSP e SERVLET, gostaria de saber se o jeito que eu estou programando e separando as regras de negócio é certo ou eu posso melhorar.

Eu separo da seguinte forma:

bean ---- que é importado p/ um servlet.

jsp que faz requisição a este servlet.

E este servlet processa a requisião e despacha.

Sugestões!!!

Obrigado

Criado 10 de maio de 2007
Ultima resposta 10 de mai. de 2007
Respostas 6
Participantes 5