Загрузка данных в jTable - PullRequest
       12

Загрузка данных в jTable

0 голосов
/ 25 октября 2019

У меня есть база данных, размер которой увеличивается, но мое приложение на Java Swing не использует Hibernate или другие фреймворки. Как я могу улучшить загрузку данных для моего JTable? Это мой код, который заполняет мою экранную таблицу, все остальные таблицы следуют этому же пути. Мой DAO работает так: я беру данные в БД, я вызываю метод стиля таблицы, чтобы установить заголовок и столбцы, а также определяемые размеры каждого столбца, после этого я вызываю tableMount, который будет проходить через набор результатов кзаполните таблицу данными. Моя проблема не в этом, а в будущем, так как эти таблицы будут расти все больше и больше, и может быть момент, что слишком много данных для извлечения из bd.

     /**
         * Método utilizado para setar os tamanhos e estilizar a tabela
         *
         * @param tabela
         * @param dadosTabela
         * @param cabecalho
         */
        private void estiloTabela(JTable tabela, Object[][] dadosTabela, Object[] cabecalho) {
    // configuracoes adicionais no componente tabela
            tabela.setModel(new DefaultTableModel(dadosTabela, cabecalho) {
                @Override
                // quando retorno for FALSE, a tabela nao é editavel
                public boolean isCellEditable(int row, int column) {
                    return false;
                    /*  
                     if (column == 3) {  // apenas a coluna 3 sera editavel
                     return true;
                     } else {
                     return false;
                     }
                     */
                }

                // alteracao no metodo que determina a coluna em que o objeto ImageIcon devera aparecer
                @Override
                public Class getColumnClass(int column) {

                    if (column == 2) {
    //                    return ImageIcon.class;
                    }
                    return Object.class;
                }
            });

            // permite seleção de apenas uma linha da tabela
            tabela.setSelectionMode(0);

            // redimensiona as colunas de uma tabela
            TableColumn column = null;
            for (int i = 0; i < tabela.getColumnCount(); i++) {
                column = tabela.getColumnModel().getColumn(i);
                switch (i) {
                    case 0:
                        column.setPreferredWidth(17);
                        break;
                    case 1:
                        column.setPreferredWidth(140);
                        break;
                    case 2:
                        column.setPreferredWidth(100);
                        break;
                    case 3:
                        column.setPreferredWidth(20);
                        break;
                    case 4:
                        column.setPreferredWidth(45);
                        break;
                    case 5:
                        column.setPreferredWidth(45);
                        break;
                    case 6:
                        column.setPreferredWidth(30);
                        break;
                    case 7:
                        column.setPreferredWidth(30);
                        break;
                    case 8:
                        column.setPreferredWidth(30);
                        break;
                    case 9:
                        column.setPreferredWidth(20);
                        break;
                    case 10:
                        column.setPreferredWidth(30);
                        break;
                    case 11:
                        column.setPreferredWidth(20);
                        break;
                    case 12:
                        column.setPreferredWidth(20);
                        break;
                    case 13:
                        column.setPreferredWidth(15);
                        break;
                }
            }
        }

/**
     * Método utilizado para colocar informação na tabela
     *
     * @param lin
     * @param dadosTabela
     * @throws SQLException
     */
    private void montaTabela(int lin, Object[][] dadosTabela) throws SQLException {
        while (resultadoQ.next()) {

            dadosTabela[lin][0] = resultadoQ.getInt("idpessoa");
            dadosTabela[lin][1] = resultadoQ.getString("razao_social");
            dadosTabela[lin][2] = resultadoQ.getString("cnpj");
            dadosTabela[lin][3] = resultadoQ.getString("ie");
            dadosTabela[lin][4] = resultadoQ.getString("telefone");
            dadosTabela[lin][5] = resultadoQ.getString("celular");
            dadosTabela[lin][6] = resultadoQ.getString("email");
            dadosTabela[lin][7] = resultadoQ.getString("bairro");
            dadosTabela[lin][8] = resultadoQ.getString("rua");
            dadosTabela[lin][9] = resultadoQ.getString("numero");
            dadosTabela[lin][10] = resultadoQ.getString("nome");
            dadosTabela[lin][11] = resultadoQ.getString("uf");
            dadosTabela[lin][12] = resultadoQ.getString("cep");
            dadosTabela[lin][13] = resultadoQ.getString("situacao").charAt(0);

            // caso a coluna precise exibir uma imagem
//                if (resultadoQ.getBoolean("Situacao")) {
//                    dadosTabela[lin][2] = new ImageIcon(getClass().getClassLoader().getResource("Interface/imagens/status_ativo.png"));
//                } else {
//                    dadosTabela[lin][2] = new ImageIcon(getClass().getClassLoader().getResource("Interface/imagens/status_inativo.png"));
//                }
            lin++;
        }
    }


    /**
     * Método utilizado na tela IfrPessoa, listando todos os itens, mesmo
     * estando ativos ou não
     * @param tabela
     * @param criterio
     */
    public void popularTabela(JTable tabela, String criterio) {
        // dados da tabela
        Object[][] dadosTabela = null;

        // cabecalho da tabela
        int qntd = 14;
        Object[] cabecalho = new Object[qntd];
        geraCabecalho(cabecalho);

        // cria matriz de acordo com nº de registros da tabela
        try {
            resultadoQ = ConexaoBD.getInstance().getConnection().createStatement().executeQuery(""
                    + "SELECT count(*) FROM pessoa WHERE razao_social ILIKE '%" + criterio + "%'");

            resultadoQ.next();

            dadosTabela = new Object[resultadoQ.getInt(1)][qntd];

        } catch (Exception e) {
            Log.geraLogBD(FrmPrincipal.usuarioLogado.getNome(), "popularTabela - n  de registros", "PessoaDAO", e.toString());
            System.out.println("Erro ao consultar pessoa: " + e);
        }

        int lin = 0;

        // efetua consulta na tabela
        try {
            resultadoQ = ConexaoBD.getInstance().getConnection().createStatement().executeQuery(""
                    + "SELECT p.cep, p.idpessoa, p.cnpj , p.ie, p.razao_social, p.telefone, p.email, p.bairro, p.rua, p.numero, p.cidade_idcidade, p.situacao, p.celular, c.nome, e.uf FROM pessoa p, cidade c, estado e "
                    + "WHERE p.razao_social ILIKE '%" + criterio + "%' AND p.cidade_idcidade=c.idcidade AND c.estado_idestado=e.idestado "
                    + "ORDER BY razao_social");

            montaTabela(lin, dadosTabela);

        } catch (Exception e) {
            Log.geraLogBD(FrmPrincipal.usuarioLogado.getNome(), "popularTabela - final", "PessoaDAO", e.toString());
            System.out.println("problemas para popular tabela...");
            System.out.println(e);
        }

        estiloTabela(tabela, dadosTabela, cabecalho);

    }

@ Редактировать: Опубликованоcode @ Edit2: выложен минимальный код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...