Chamar Metodo

16 respostas Resolvido
java
Henri199

Boa noite, tenho uma classe chama ValidaCPF, juntamente com o campo CPF e Botão Salvar.
Minha duvida é, como eu vou chamar esse método, eu chamo o metedo no CPF ou no Botão?

public class ValidaCPF {
private static final int[] pesoCPF = {11, 10, 9, 8, 7, 6, 5, 4, 3, 2};


private static int calcularDigito(String str, int[] peso) {
int soma = 0;
for (int indice=str.length()-1, digito; indice >= 0; indice-- ) {
digito = Integer.parseInt(str.substring(indice,indice+1));
soma += digito*peso[peso.length-str.length()+indice];
}
soma = 11 - soma % 11;
return soma > 9 ? 0 : soma;
}

public static boolean isValidCPF(String cpf) {
if ((cpf==null) || (cpf.length()!=11)) return false;

  Integer digito1 = calcularDigito(cpf.substring(0,9), pesoCPF);
  Integer digito2 = calcularDigito(cpf.substring(0,9) + digito1, pesoCPF);
  return cpf.equals(cpf.substring(0,9) + digito1.toString() + digito2.toString());
}

16 Respostas

rodriguesabner

eu falei isso pra vc no outro topico

Henri199
Sim, mas tentei meio que tudo e nada, ele da erro

identar

ValidaCPF valida = new ValidaCPF();

valida.isValidCPF();
if(isValidaCpf(txtCpfCamp.getText())){
        Adicionar();
    } else {
        JOptionPane.showInputDialog(this,"Erro");
Henri199

Desculpe minha ignorância, eu estava puxando direto no botão, mas era no metodo como vc falou.
so que ainda da um erro, ele não esta validando
identar private void Adicionar() {

String sql = "insert into tbcampista(Nomecamp,endcamp,cpfcamp,TelefoneCamp,PlacaCamp,observacoes,Enbarca,Tipo,Perfil)"
            + " values(?,?,?,?,?,?,?,?,?"
            + ")";

    try {
        pst = conexao.prepareStatement(sql);
        pst.setString(1, txtNomeCamp.getText());
        pst.setString(2, txtEndeCamp.getText());
        pst.setString(3, txtCpfCamp.getText());
        pst.setString(4, txtfonecam.getText());
        pst.setString(5, TxtPlaca.getText());
        pst.setString(6, jObervacoes.getText());
        pst.setString(7, Embarca.getSelectedItem().toString());
        pst.setString(8, LTipo.getSelectedItem().toString());
        pst.setString(9, TipoUsuario.getSelectedItem().toString());

        if (((txtNomeCamp.getText().isEmpty()) || (txtCpfCamp.getText().isEmpty()))) {
            JOptionPane.showMessageDialog(null, " Todos os Campos Marcados com *, são Obrigatórios");
        
        } if (isValidCPF(txtCpfCamp.getText())) {
                JOptionPane.showMessageDialog(null, "Atenção, o CPF digitado não é válido");
                }

        else  {

            int adicionado = pst.executeUpdate();

            if (adicionado > 0) {
                JOptionPane.showMessageDialog(null, "Campista  Cadastrado com Sucesso!!!");
                txtNomeCamp.setText(null);
                //txtNomeCamp.setText(null);
                txtEndeCamp.setText(null);
                txtCpfCamp.setText(null);
                txtfonecam.setText(null);
                TxtPlaca.setText(null);
                jObervacoes.setText(null);
                Embarca.setSelectedItem(null);
                LTipo.setSelectedItem(null);
                TipoUsuario.setSelectedItem(null);

                //TipoUsuario.setSelectedItem(null);
            }
        }
    } catch (Exception e) {
        JOptionPane.showMessageDialog(this,e);
    }

}

private void PesquisarCampistas() {
    String sql = " select * from tbcampista where CpfCamp like ?";
    try {
        pst = conexao.prepareStatement(sql);
        // Passando da caixa de pesquisa
        pst.setString(1, txtPesquisarCamp.getText() + "%");
        // executa a query
        rs = pst.executeQuery();
        // usa a biblioteca para preencher a tabela
        tblCampista.setModel(DbUtils.resultSetToTableModel(rs));

    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
    }

}
rodriguesabner
Solucao aceita

Mas qual erro ta dando?

Henri199

ele adiciona cpf inválidos. olha meu codigo pra adicionar, eu acho que to errando nos Ifs
identar public TelaCampista() {

conexao = Conexao.Conector();
    initComponents();

    //LTipo.setVisible(false);
}

private void Adicionar() {

    String sql = "insert into tbcampista(Nomecamp,endcamp,cpfcamp,TelefoneCamp,PlacaCamp,observacoes,Enbarca,Tipo,Perfil)"
            + " values(?,?,?,?,?,?,?,?,?"
            + ")";

    try {
        pst = conexao.prepareStatement(sql);
        pst.setString(1, txtNomeCamp.getText());
        pst.setString(2, txtEndeCamp.getText());
        pst.setString(3, txtCpfCamp.getText());
        pst.setString(4, txtfonecam.getText());
        pst.setString(5, TxtPlaca.getText());
        pst.setString(6, jObervacoes.getText());
        pst.setString(7, Embarca.getSelectedItem().toString());
        pst.setString(8, LTipo.getSelectedItem().toString());
        pst.setString(9, TipoUsuario.getSelectedItem().toString());

        if (((txtNomeCamp.getText().isEmpty()) || (txtCpfCamp.getText().isEmpty()))) {
            JOptionPane.showMessageDialog(null, " Todos os Campos Marcados com *, são Obrigatórios");
        
        } if (isValidCPF(txtCpfCamp.getText())) {
                JOptionPane.showMessageDialog(null, "Atenção, o CPF digitado não é válido");
                
                }else {

          

            int adicionado = pst.executeUpdate();

            if (adicionado > 0) {
                JOptionPane.showMessageDialog(null, "Campista  Cadastrado com Sucesso!!!");
                txtNomeCamp.setText(null);
                //txtNomeCamp.setText(null);
                txtEndeCamp.setText(null);
                txtCpfCamp.setText(null);
                txtfonecam.setText(null);
                TxtPlaca.setText(null);
                jObervacoes.setText(null);
                Embarca.setSelectedItem(null);
                LTipo.setSelectedItem(null);
                TipoUsuario.setSelectedItem(null);

                //TipoUsuario.setSelectedItem(null);
            }
        }
    } catch (Exception e) {
        JOptionPane.showMessageDialog(this,e);
    }
rodriguesabner

Cara, faz um teste isolado primeiro, sem adicionar no banco, exemplo, na classe que vc criou com o método de validar, faz o teste lá:

public static void main(String[] args){
    if(isValidCPF(123456789-00){
       System.out.println("o cpf é valido");
    } else {
       System.out.println("esse cpf nao existe");   
    }
}

Depois de funcionar, vc faz as condições antes do prepareStatement, fica mais facil pra organizar:

if(blablabla){
   //erro
} else {
   //salva os arquvios
   try {
      pst = conexao.prepareStatement(sql);
      pst.setString(1, txtNomeCamp.getText());
      pst.setString(2, txtEndeCamp.getText());
      .....
}
Henri199

Teste a classe validação como vc falou, esta funcionando, só o método que não consigo chamar, to ja a dois dias nisso kkk

rodriguesabner

O método é static, só chamar ele no botão de cadastrar

Henri199

acho que eu fiz errado a pergunta, digo colocar os Ifs de validação, pois tenho outro de campo obrigatórios, dai quando aperto em cadastrar eme chama ate o metodo faz sabe, só que não valida, mas teste só na classe ele da certo.
identar private void Adicionar() {

String sql = "insert into tbcampista(Nomecamp,endcamp,cpfcamp,TelefoneCamp,PlacaCamp,observacoes,Enbarca,Tipo,Perfil)"
            + " values(?,?,?,?,?,?,?,?,?"
            + ")";

    {

        try {

            pst = conexao.prepareStatement(sql);
            pst.setString(1, txtNomeCamp.getText());
            pst.setString(2, txtEndeCamp.getText());
            pst.setString(3, txtCpfCamp.getText());
            pst.setString(4, txtfonecam.getText());
            pst.setString(5, TxtPlaca.getText());
            pst.setString(6, jObervacoes.getText());
            pst.setString(7, Embarca.getSelectedItem().toString());
            pst.setString(8, LTipo.getSelectedItem().toString());
            pst.setString(9, TipoUsuario.getSelectedItem().toString());

            if (((txtNomeCamp.getText().isEmpty()) || (txtCpfCamp.getText().isEmpty()))) {
                JOptionPane.showMessageDialog(null, " Todos os Campos Marcados com *, são Obrigatórios");

                //se o cpf digitado for válido
                //deixa cadastrar
            } else {

                int adicionado = pst.executeUpdate();

                if (adicionado > 0) {
                    JOptionPane.showMessageDialog(null, "Campista  Cadastrado com Sucesso!!!");
                    txtNomeCamp.setText(null);
                    //txtNomeCamp.setText(null);
                    txtEndeCamp.setText(null);
                    txtCpfCamp.setText(null);
                    txtfonecam.setText(null);
                    TxtPlaca.setText(null);
                    jObervacoes.setText(null);
                    Embarca.setSelectedItem(null);
                    LTipo.setSelectedItem(null);
                    TipoUsuario.setSelectedItem(null);

                    //TipoUsuario.setSelectedItem(null);
                }
            }
        } catch (HeadlessException | SQLException e) {
            JOptionPane.showMessageDialog(this, e);
        }

    }

}
rodriguesabner

eu fiz isso em um site, entao não está identado e pode ter erro de digitação ou sintaxe, mas se vc fizer assim funciona, e seu código fica mais organizado

private void saveData(){
	String SQL = "insert into tbcampista(Nomecamp,endcamp,cpfcamp,TelefoneCamp,PlacaCamp,observacoes,Enbarca,Tipo,Perfil)"
    + " values (?,?,?,?,?,?,?,?,?"
    + ")";
    
    if ((txtNomeCamp.getText().isEmpty()) || (txtCpfCamp.getText().isEmpty())) {
        System.out.println("Preencha os campos obrigatórios...");
    } else {
        if(!isValidCPF(txtCpfCamp.getText()){
            //cpf invalido
             System.out.println("Preencha o cpf corretamente...");
        } else {
           //cpf válido
           //salva os dados
           try {
                pst = conexao.prepareStatement(sql);
                pst.setString(1, txtNomeCamp.getText());
                pst.setString(2, txtEndeCamp.getText());
                pst.setString(3, txtCpfCamp.getText());
                pst.setString(4, txtfonecam.getText());
                pst.setString(5, TxtPlaca.getText());
                pst.setString(6, jObervacoes.getText());
                pst.setString(7, Embarca.getSelectedItem().toString());
                pst.setString(8, LTipo.getSelectedItem().toString());
                pst.setString(9, TipoUsuario.getSelectedItem().toString());
                pst.executeUpdate();
                
                clearData();
          } catch (Exception e){
              e.printStackTrace();
          }
        }
	}
}

private void clearData(){
    txtNomeCamp.setText(null);
    //txtNomeCamp.setText(null);
    txtEndeCamp.setText(null);
    txtCpfCamp.setText(null);
    txtfonecam.setText(null);
    TxtPlaca.setText(null);
    jObervacoes.setText(null);
    Embarca.setSelectedItem(null);
    LTipo.setSelectedItem(null);
    TipoUsuario.setSelectedItem(null);
    
    //TipoUsuario.setSelectedItem(null);
}
staroski

Seu método é estático, é só invocar ele e pronto.

Outra coisa, faça as validações ANTES de criar o PreparedStatement, não faz sentido você testar depois de ter criado ele.

Exemplo:

private void Adicionar() {
    try {
        String nome = txtNomeCamp.getText();
        String cpf = txtCpfCamp.getText();
        
        if (nome == null || "".equals(nome)
          || cpf == null || "".equals(cpf)) {
            JOptionPane.showMessageDialog(null, "Todos os Campos Marcados com *, são Obrigatórios");
            return;
        }
        
        if (!ValidaCPF.isValidCpf(cpf)) {
            JOptionPane.showMessageDialog(null, "CPF inválido");
            return;
        }

        String sql = "insert into tbcampista(Nomecamp,endcamp,cpfcamp,TelefoneCamp,PlacaCamp,observacoes,Enbarca,Tipo,Perfil)"
               + " values(?,?,?,?,?,?,?,?,?)";
               
        pst = conexao.prepareStatement(sql);
        pst.setString(1, nome);
        pst.setString(2, txtEndeCamp.getText());
        pst.setString(3, cpf);
        pst.setString(4, txtfonecam.getText());
        pst.setString(5, TxtPlaca.getText());
        pst.setString(6, jObervacoes.getText());
        pst.setString(7, Embarca.getSelectedItem().toString());
        pst.setString(8, LTipo.getSelectedItem().toString());
        pst.setString(9, TipoUsuario.getSelectedItem().toString());
        int adicionado = pst.executeUpdate();

        if (adicionado > 0) {
            JOptionPane.showMessageDialog(null, "Campista  Cadastrado com Sucesso!");
            txtNomeCamp.setText(null);
            txtEndeCamp.setText(null);
            txtCpfCamp.setText(null);
            txtfonecam.setText(null);
            TxtPlaca.setText(null);
            jObervacoes.setText(null);
            Embarca.setSelectedItem(null);
            LTipo.setSelectedItem(null);
            TipoUsuario.setSelectedItem(null);
        }
    } catch (HeadlessException | SQLException e) {
        JOptionPane.showMessageDialog(this, e);
    }
}
rodriguesabner

@staroski, me tira uma dúvida, se eu pego o valor do txtNomeCamp , por exemplo, ele já não recebe ""/vazio?

staroski

Provavelmente vai ter momentos em que vai retornar null ao invés de "", pois nosso colega @Henri199 está fazendo chamadas como essa:

txtNomeCamp.setText(null);
rodriguesabner

Hmmm, entendi. Valeu!!

Henri199

Amigos, primeiramente quero agradecer vcs, por pela humildade e disponibilidade que estão tento. Faz as alterações, mas agora j-só da Cpf invalido. Vou deixar a classe que estou usando pra validar.

identar texto pré-formatado por 4 espaços
public class ValidaCPF {

public static boolean ValidacaoCPF(String CPF) {

// considera-se erro CPF’s formados por uma sequencia de numeros iguais

if (CPF.equals([telefone removido]) ||

CPF.equals([telefone removido]) ||

CPF.equals([telefone removido]) || CPF.equals([telefone removido]) ||

CPF.equals([telefone removido]) || CPF.equals([telefone removido]) ||

CPF.equals([telefone removido]) || CPF.equals([telefone removido]) ||

CPF.equals([telefone removido]) || CPF.equals([telefone removido]) ||

(CPF.length() != 11))

return(false);
char dig10, dig11;
    int sm, i, r, num, peso;
      
    // "try" - protege o codigo para eventuais erros de conversao de tipo (int)
    try {
    // Calculo do 1o. Digito Verificador
        sm = 0;
        peso = 10;
        for (i=0; i<9; i++) {              
    // converte o i-esimo caractere do CPF em um numero:
    // por exemplo, transforma o caractere '0' no inteiro 0         
    // (48 eh a posicao de '0' na tabela ASCII)         
        num = (int)(CPF.charAt(i) - 48); 
        sm = sm + (num * peso);
        peso = peso - 1;
        }
      
        r = 11 - (sm % 11);
        if ((r == 10) || (r == 11))
            dig10 = '0';
        else dig10 = (char)(r + 48); // converte no respectivo caractere numerico
      
    // Calculo do 2o. Digito Verificador
        sm = 0;
        peso = 11;
        for(i=0; i<10; i++) {
        num = (int)(CPF.charAt(i) - 48);
        sm = sm + (num * peso);
        peso = peso - 1;
        }
      
        r = 11 - (sm % 11);
        if ((r == 10) || (r == 11))
             dig11 = '0';
        else dig11 = (char)(r + 48);
      
    // Verifica se os digitos calculados conferem com os digitos informados.
        if ((dig10 == CPF.charAt(9)) && (dig11 == CPF.charAt(10)))
             return(true);
        else return(false);
            } catch (InputMismatchException erro) {
            return(false);
        }
    }
      
    public static String imprimeCPF(String CPF) {
        return(CPF.substring(0, 3) + "." + CPF.substring(3, 6) + "." +
        CPF.substring(6, 9) + "-" + CPF.substring(9, 11));
        
    }
   // public static void main(String[] args){
//if(ValidacaoCPF("[telefone removido]")){
  // System.out.println("o cpf é valido");
//} else {
  // System.out.println("esse cpf nao existe");   
}
staroski

Se o seu validador tá com bug, copia o meu.

Criado 16 de junho de 2020
Ultima resposta 19 de jun. de 2020
Respostas 16
Participantes 3