[Ajuda] Pesquisa com JTable

2 respostas
Fabiano_Fernandes

Galera peço a ajuda de vocês, tenho uma JTable que retorna os valores do Banco de dados, porém quero limitar a pesquisa por exemplo, tenho uma tabela no banco de dados com um número de registros 50 mil por exemplo, Se eu colocar para fazer uma pesquisa de todos os registros, creio que isso causara uma certa lentidão em meu sistema, então gostaria de saber como faço por exemplo para ele listar apenas 20 registros, e para exibir os outros 20 eu pretendo usar um botão, mas não faço ideia de como fazer isso.
Tem como limitar a busca no código SQL porém, não consigo listar os proximo.
Caso não tenha ficado claro, basta dizer que vou tentar explicar melhor.

Obs: estou usando DefaultTableModel

Evento do botão de pesquisa
Log_control PesquisarLog = new Log_control();
List<Log_bean> pesquisaLog = PesquisarLog.ListarLogs(jtf_PesquisarLog.getText() + "%",jtf_PesquisarLog.getText(),jtf_PesquisarLog.getText());

MostrarPesquisaLog(pesquisaLog);
Metodo da classe de controle
public List<Log_bean> ListarLogs (String NomeMed,String Usuario ,String cBarras) throws SQLException{
            
            List<Log_bean> Registro = new ArrayList();
            AcessoMySql mysql = new AcessoMySql();
            pstm = (PreparedStatement) mysql.conectar().prepareStatement(ConsultaLogs);
            pstm.setString(1, NomeMed);
            pstm.setString(2, Usuario);
            pstm.setString(3, cBarras);
            rs = pstm.executeQuery();
            Log_bean Log;
    
            while (rs.next()){
                Log = new Log_bean();
                Log.setId_user(rs.getInt("Id_user"));
                Log.setAcao(rs.getString("acao"));
                Log.setData(rs.getDate("DataAtualizacao"));
                Log.setHora(rs.getTime("HORA"));
                Log.setId_med(rs.getInt("id_med"));
                Log.setNome_med(rs.getString("nome_med"));
                Log.setLogin_user(rs.getString("login_user"));
                Log.setId_registro(rs.getInt("id_reg"));
                Log.setTipo(rs.getString("tipo_med"));
                Log.setQuantidade(rs.getString("qtd"));
                Log.setCod_entrada(rs.getInt("ID_ENTRADA"));
                 
                Registro.add(Log);
    

        }
            mysql.desconectar();
            return Registro;

        }

Metodo para exibir a pesquisa na JTable

private void MostrarPesquisaLogData(List<Log_bean> pesquisa) {
        while (tm_log.getRowCount() > 0) {//TODA VEZZ QUE EFETUAR UMA NOVA PESQUISA..
            tm_log.removeRow(0);         //...IRA LIMPAR A PESQUISA ANTERIOR.

        }
        if (pesquisa.isEmpty()) {//SE O RESULTADO DA PESQUISA FOR VAZIO EXIBE A MSG
            JOptionPane.showMessageDialog(this, "Código de entrada não encontrado. ");
        } else {

            String[] campos = new String[]{null};
            for (int i = 0; i < pesquisa.size(); i++) {
                System.out.println("MOSTRAR LOG NA JTABLE");
                //OBS: TEM QUE TER A MESMA QUANTIA DE CAMPOS DO DEFAULTTABLEMODEL
                tm_log.addRow(campos);//ENQUANTO A CONDIÇÃO FOR VERDADE VAI ADICIONAR UMA LINHA
Date DataLog = pesquisa.get(i).getData();
                SimpleDateFormat formatadata = new SimpleDateFormat("dd/MM/yyy");
                String Data = formatadata.format(DataLog);

                String login = pesquisa.get(i).getLogin_user();
                String acao = pesquisa.get(i).getAcao();
                String nomemed = pesquisa.get(i).getNome_med();
                String tipomed = pesquisa.get(i).getTipo();
                Time Hora = pesquisa.get(i).getHora();
                String qtd = pesquisa.get(i).getQuantidade();
                int cod_entrada = pesquisa.get(i).getCod_entrada();

                System.out.println("codigo entrada =" + cod_entrada);
                System.out.println("quantidade = " + qtd);

                if (acao.equals("INSERT")) {//ALTERTAR DE INSERT PARA ENTRADA NO BD
                    tm_log.setValueAt(pesquisa.get(i).getId_registro(), i, 0);
                    tm_log.setValueAt((Data), i, 1);
                    tm_log.setValueAt("O usuário " + login + " efetuou uma nova entrada do médicamento " + nomemed + " do tipo " + tipomed + " com " + qtd + " unidades no dia " + Data + " as " + Hora, i, 2);

                } else if (acao.equals("Atualiza")) {//ALTERAR DE DELETE PARA SAIDA NO BD
                    tm_log.setValueAt(pesquisa.get(i).getId_registro(), i, 0);
                    tm_log.setValueAt((Data), i, 1);
                    tm_log.setValueAt("O usuário " + login + " atualizou a entrada do médicamento " + nomemed + " do tipo " + tipomed + " no dia " + Data + " as " + Hora + " para " + qtd + " unidades", i, 2);

                } else if (acao.equals("DELET")) {
                    tm_log.setValueAt(pesquisa.get(i).getId_registro(), i, 0);
                    tm_log.setValueAt((Data), i, 1);
                    tm_log.setValueAt("O usuário " + login + " efetuou uma nova saida do médicamento " + nomemed + " do tipo " + tipomed + " com " + qtd + " unidades no dia " + Data + " as " + Hora, i, 2);

                } else {
                    tm_log.setValueAt(pesquisa.get(i).getId_registro(), i, 0);
                    tm_log.setValueAt((Data), i, 1);
                    tm_log.setValueAt("O usuário " + login + " atualizou a saida do médicamento " + nomemed + " do tipo " + tipomed + " no dia " + Data + " as " + Hora + " para " + qtd + " unidades", i, 2);

                }
            }
        }

    }

2 Respostas

drsmachado

Dê uma boa estudada em paginação, em geral, todos os SGBDs (oracle, MySQL, SQL Server, postgres) fornecem suporte a paginação. Basicamente, você passa um total de registros e qual a página que está buscando naquele momento.
Aqui tem um exemplo de Table Model para paginação usando JTable

Fabiano_Fernandes

Obrigado Amigo, vou estudar

Criado 27 de agosto de 2016
Ultima resposta 10 de out. de 2016
Respostas 2
Participantes 2