【问题标题】:Searching in database with any filter使用任何过滤器在数据库中搜索
【发布时间】:2021-12-12 03:31:51
【问题描述】:

我创建了一个带有 jTable 的 GUI 来向用户显示数据,用户可以使用他想要的任何过滤器进行搜索,但是,我需要用 jTextField 来识别是空的还是填充的。 那么,如何检查一个 jTextField 是否为空并让 else if 有效?

例如,用户插入一个名称 (jTextFieldNOME) 并单击 jButton 而没有在另一个 jTextField 中写入(还有另外 3 或 4 个 jTextField 遵循类似的模式)。

现在发生的只是运行第一个 else if:else if(jTextFieldNOME.getText() != null)

if(jTextFieldNOME.getText().equals("") && jTextFieldCPF.getText().equals("") && jTextFieldAPELIDO.getText().equals("") && jTextFieldIDADEMIN.getText().equals("") && jTextFieldIDADEMAX.getText().equals("")){

            JOptionPane.showMessageDialog(null, "Vazios\n");
            PreparedStatement stm=cn.prepareStatement("select * from cad_pessoa ");
            ResultSet rs = stm.executeQuery();
            
            DefaultTableModel tm=(DefaultTableModel) jTableDADOS.getModel();
            tm.setRowCount(0);
        
        while(rs.next()){
            
            Object o []= {rs.getString("cad_cpf"), rs.getString("cad_nome"), rs.getString("cad_apelido"), rs.getString("cad_idade"), rs.getDate("cad_data")};
            tm.addRow(o);
                
        }
            
        }

        else if(jTextFieldNOME.getText() != null) {
        
        PreparedStatement ps=cn.prepareStatement("select cad_nome,cad_apelido,cad_cpf,cad_idade,cad_data from cad_pessoa where cad_nome like ? order by cad_nome asc, cad_cpf asc nulls last ");
        ps.setString(1,"%" + jTextFieldNOME.getText() + "%");

            ResultSet rs = ps.executeQuery();
            ps.execute();
            
        
        DefaultTableModel tm=(DefaultTableModel) jTableDADOS.getModel();
        tm.setRowCount(0);
        JOptionPane.showMessageDialog(null, "nomes\n");
        while(rs.next()){
            
            Object o []= {rs.getString("cad_cpf"), rs.getString("cad_nome"), rs.getString("cad_apelido"), rs.getString("cad_idade"), rs.getDate("cad_data")};
            tm.addRow(o);
            
            
        }
        }
        
        else if (jTextFieldAPELIDO.getText() != null){
            
            PreparedStatement ps=cn.prepareStatement("select cad_nome,cad_apelido,cad_cpf,cad_idade,cad_data from cad_pessoa where cad_apelido like ? order by cad_nome asc, cad_cpf asc nulls last ");
        ps.setString(1,"%" + jTextFieldAPELIDO.getText() + "%");

            ResultSet rs = ps.executeQuery();
            ps.execute();
            
        
        DefaultTableModel tm=(DefaultTableModel) jTableDADOS.getModel();
        tm.setRowCount(0);
        JOptionPane.showMessageDialog(null, "apelidos\n");
        while(rs.next()){
            
            Object o []= {rs.getString("cad_cpf"), rs.getString("cad_nome"), rs.getString("cad_apelido"), rs.getString("cad_idade"), rs.getDate("cad_data")};
            tm.addRow(o);

        }
        
        }

【问题讨论】:

    标签: java sql swing jtable jtextfield


    【解决方案1】:

    好的,经过这里的一些研究和一些教程,这就是我所做的:

    为了解决空的jTextField 并且仍然运行我不想要的if 的问题,使用get length,在去数据库中搜索之前输入一些这个jTextField 需要的字母或数字。

    代码如下:

    if(jTextFieldNOME.getText().equals("") && jTextFieldCPF.getText().equals("") && jTextFieldAPELIDO.getText().equals("") && jTextFieldIDADEMIN.getText().equals("") && jTextFieldIDADEMAX.getText().equals("")){
    
                JOptionPane.showMessageDialog(null, "Vazios\n");
                PreparedStatement stm=cn.prepareStatement("select * from cad_pessoa ");
                ResultSet rs = stm.executeQuery();
                
                DefaultTableModel tm=(DefaultTableModel) jTableDADOS.getModel();
                tm.setRowCount(0);
            
            while(rs.next()){
                
                Object o []= {rs.getString("cad_cpf"), rs.getString("cad_nome"), rs.getString("cad_apelido"), rs.getString("cad_idade"), rs.getDate("cad_data")};
                tm.addRow(o);
                    
            }
                
            }
    
            else if(jTextFieldNOME.getText().length()>2) {
            
            PreparedStatement ps=cn.prepareStatement("select cad_nome,cad_apelido,cad_cpf,cad_idade,cad_data from cad_pessoa where cad_nome like ? order by cad_nome asc, cad_cpf asc nulls last ");
            ps.setString(1,"%" + jTextFieldNOME.getText() + "%");
    
                ResultSet rs = ps.executeQuery();
                ps.execute();
                
            
            DefaultTableModel tm=(DefaultTableModel) jTableDADOS.getModel();
            tm.setRowCount(0);
    
            while(rs.next()){
                
                Object o []= {rs.getString("cad_cpf"), rs.getString("cad_nome"), rs.getString("cad_apelido"), rs.getString("cad_idade"), rs.getDate("cad_data")};
                tm.addRow(o);
                
                
            }
            }
            
            else if (jTextFieldAPELIDO.getText().length()>2){
                
                PreparedStatement ps=cn.prepareStatement("select cad_nome,cad_apelido,cad_cpf,cad_idade,cad_data from cad_pessoa where cad_apelido like ? order by cad_nome asc, cad_cpf asc nulls last ");
            ps.setString(1,"%" + jTextFieldAPELIDO.getText() + "%");
    
                ResultSet rs = ps.executeQuery();
                ps.execute();
                
            
            DefaultTableModel tm=(DefaultTableModel) jTableDADOS.getModel();
            tm.setRowCount(0);
    
            while(rs.next()){
                
                Object o []= {rs.getString("cad_cpf"), rs.getString("cad_nome"), rs.getString("cad_apelido"), rs.getString("cad_idade"), rs.getDate("cad_data")};
                tm.addRow(o);
    
            }
            
            }
    

    就我而言,仅 2 个字节就足以进行搜索并显示在我的 jTable

    【讨论】:

      猜你喜欢
      • 2022-01-06
      • 2014-04-04
      • 2020-01-08
      • 1970-01-01
      • 2018-01-18
      • 2019-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多