Verifica se há mais de um registro JAVA SQL

5 respostas
postgresqlprogramaçãojavasqlmysql
F

Estou desenvolvendo uma aplicação java para desktop e gostaria de pegar somente os registros duplicados e mostrar em uma table mas o meu comando sql não está retornando nada.
Exemplo tenho na minha tabela visitas dois nomes de Lucas, gostaria de retorna esse dados dos Lucas em uma table.Mas ele não retorna os dados dos dois Lucas.

public DefaultTableModel pesquisaVisitasMaisDeUmResultado(String nome){
  
     Visitas visi= new Visitas();
    
     try {
        con = Conecta.conexao();
    } catch (ClassNotFoundException ex) {
        Logger.getLogger(EntradaMaquinaDAO.class.getName()).log(Level.SEVERE, null, ex);
    }
     
     DefaultTableModel modelo;

 String [] titulos = {"Defeito","data entrada","Data saida","Hora de entrada","Hora de Saida","Horas Trabalhadas","Word","Excel","Power","Outlook","Visitas"};

String [] registro = new String[11];

modelo= new DefaultTableModel(null,titulos);
     
    
    if(!"".equals(nome)){
        
       try{
     String sql="SELECT vi_cod, count(cha_nome),vi_dataentra,vi_datasaida,vi_defeito,vi_horainicio,vi_horafinal,vi_horastrabalhadas, vi_word, vi_excel,vi_power,vi_qtde, vi_outlook FROM tb_visitas where cha_nome like  '%" + nome +"%' group by vi_cod having count(cha_nome)>1";
           
      Statement statement = con.createStatement();     
     
    ResultSet rs = statement.executeQuery(sql);    
      
        if(rs.next()){
              registro [0]=rs.getString("vi_defeito");
           registro [1]=rs.getString("vi_dataentra");
            registro [2]=rs.getString("vi_datasaida");
            registro [3]=rs.getString("vi_horainicio");
            registro [4]=rs.getString("vi_horafinal");
           registro [5]=rs.getString("vi_horastrabalhadas");
            registro [6]=rs.getString("vi_word");
            registro [7]=rs.getString("vi_excel");
            registro [8]=rs.getString("vi_power");
          registro [9]=rs.getString("vi_outlook");
          registro [10]=rs.getString("vi_qtde");
          
     modelo.addRow(registro);
            
        }
        else{
            

           registro [0]=rs.getString("vi_defeito");
           registro [1]=rs.getString("vi_dataentra");
            registro [2]=rs.getString("vi_datasaida");
            registro [3]=rs.getString("vi_horainicio");
            registro [4]=rs.getString("vi_horafinal");
           registro [5]=rs.getString("vi_horastrabalhadas");
            registro [6]=rs.getString("vi_word");
            registro [7]=rs.getString("vi_excel");
            registro [8]=rs.getString("vi_power");
          registro [9]=rs.getString("vi_outlook");
          registro [10]=rs.getString("vi_qtde");
          
           
                if(rs.getString("vi_word")==null){
                  checkboxWord.setSelected(false);
                     }
                 else{
                       visi.setVi_word(rs.getString("vi_word"));
                    checkboxWord.setSelected(true);
                    }

                  if(rs.getString("vi_excel")== null){
                 checkboxExcel.setSelected(false);
                  }
                  else{
                        visi.setVi_excel(rs.getString("vi_excel"));
               checkboxExcel.setSelected(true);
                  }
                  
                  if(rs.getString("vi_power")== null){
                jCheckBoxPower.setSelected(false);
                  }
                  else{
                        visi.setVi_power(rs.getString("vi_power"));
               jCheckBoxPower.setSelected(true);
                  }
                  
                  if(rs.getString("vi_outlook")== null){
                 jCheckBoxOutllok.setSelected(false);
                  }
                  else{
                       visi.setVi_outlook(rs.getString("vi_outlook"));
               jCheckBoxOutllok.setSelected(true);
                  }
                  
                  
   
    txtVisita.setText(String.valueOf(rs.getInt("vi_cod")));
  txtNome.setText(rs.getString("cha_nome"));
    txtDescricao.setText(rs.getString("vi_defeito"));
    txtHoraInicio.setText(rs.getString("vi_horainicio"));
   txtHorarioFinal.setText(rs.getString("vi_horafinal"));
    txtResul.setText(rs.getString("vi_horastrabalhadas"));
   jFormattedDataEntrada.setText(rs.getString("vi_dataentra"));
    jFormattedDataSaida.setText(rs.getString("vi_datasaida"));
  txtVisitas.setText(String.valueOf(rs.getInt("vi_qtde")));
   
     modelo.addRow(registro);
             
        }
         
        return modelo;
    }catch(SQLException ex){
        JOptionPane.showMessageDialog(null, " erro" +  ex);
    } 
    } else{
        JOptionPane.showMessageDialog(null, "Não há visitas para a pesquisa! \nTente novamente...");
    } 
  
   return modelo;
}
  void mostrarResultadosVisitasChamadasMaisDeUm(String nome) {
    try {
        DefaultTableModel modelo,modelo2;
        
       modelo=pesquisaVisitasMaisDeUmResultado(txtNome.getText());
        jTable1.setModel(modelo);
       
    
        ocultar_colunas();

    } catch (Exception e) {
        System.out.println("Erro ao mostrar os dados  :\n Erro:" + e.getMessage());

    }
}

Botão pesquisar

private void btnConsultarActionPerformed(java.awt.event.ActionEvent evt) {                                             
   
     
   mostrarResultadosVisitasChamadasMaisDeUm(txtNome.getText());
   

}

5 Respostas

Jederson_Andre

Essa condição ta realmente validando??
Coloque o resto como comentário e deixe somente esta instrução, assim irá verificar se esta realmente funcionando:

System.out.println(nome); // imprimirá o valor do atributo nome, caso não imprimir esta verificação não esta funcionando.
F

ele me retorna o nome que digito no campo, Lucas

Jederson_Andre

Pq vc nao usa só assim:

SELECT vi_cod,cha_nome,vi_dataentra,vi_datasaida,vi_defeito,vi_horainicio,vi_horafinal,vi_horastrabalhadas, vi_word, vi_excel,vi_power,vi_qtde, vi_outlook FROM tb_visitas where cha_nome like '% + nome +"%’

assim ele vai mostrar apenas os registros que tiver a “nome” que foi fornecido pelo usuario

F

por que estou limitando o resultado em que se tiver mais de um resultado eu só mostro os nomes na JTable e caso tiver apenas um resultado referente ao nome eu mostro os dados na JTable e retorno os dados nos campo de busca preenchendo os checkbox automaticamente

Jederson_Andre

Da uma espiada neste artigo da Devmedia.
tenta utilizar na sua SQL sem a clausula WHERE, somente com GROUP BY e HAVING, para ver se funciona.

Criado 9 de dezembro de 2017
Ultima resposta 9 de dez. de 2017
Respostas 5
Participantes 2