1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

JavaSE e BD Mysql Problema

Bom dia Pessoal, estou criando uma aplicação java desktop, a qual utiliza um banco de dados que está em um servidor.

Porém quando eu clico em um JButton que vai fazer a consulta sql no banco de dados, a aplicação se apresenta lenta.

Eu já utilizei esse banco de dados para outras aplicações e normalmente não era lento como é no java, portanto gostaria de saber como faço e se alguém tem algum artigo que possa me dar dicas de otimização desse processo.

Outra coisa é que quando eu clico em um botão, o JFrame fico escuro dessa maneira:

Erro!

E não prossegue para o resultado da consulta SQL. As vezes da um erro que pode ser visto no console:

** BEGIN NESTED EXCEPTION **

com.mysql.jdbc.CommunicationsException

MESSAGE: Communications link failure due to underlying exception:

BEGIN NESTED EXCEPTION

java.io.EOFException MESSAGE: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.

STACKTRACE: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.**

As vezes exibe o resultado da consulta SQL normalmente. O que pode ser galera? alguém pode me dar uma ajuda?

Desde já, grato. Abraços.

public class FrameListar extends JFrame {
    JTable tabela = new JTable();
    DefaultTableModel modeloTabela = null;

    JPanel panel_princ = new JPanel(); 

    JLabel lbBuscar = new JLabel("Buscar:");
    JTextField tfBuscar = new JTextField();
    JButton btOk = new JButton("Ok");
    JButton btVoltar = new JButton("Voltar ao Menu Principal");
    JButton btExcluir = new JButton("Excluir");
    JButton btAlterar = new JButton("Alterar");
    JButton btMatricular = new JButton("Matricular");


    public FrameListar(String param_curso, String param_status) {
        setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); // definindo o tipo de fechamento do JFrame
        setVisible(true);
        setSize(1000,700);
        setResizable(false);
        setLocationRelativeTo(null);
        setTitle("Alunos "+param_status+" de "+param_curso);



        addWindowListener(new WindowAdapter(){ 
            public void windowClosing(WindowEvent evt){ 
                FramePrincipal cf = new FramePrincipal();
                cf.setVisible(false);
            } 
        });

        tabela.setModel(new DefaultTableModel(    
            new Object [][] { },    
            new String [] {"Id","Nome", "Endereço", "Tel. Fixo", "Tel. Movel", "Email", "Curso", "Data de Cadastro", "Status"}){  

                boolean[] canEdit = new boolean []{    
                    false, false, false, false, false, false, false, false, false  
                };    

            @Override    
            public boolean isCellEditable(int rowIndex, int columnIndex) {    
                return canEdit [columnIndex];    
            }  
        }); 

        tabela.getColumnModel().getColumn(0).setPreferredWidth(-5);
        tabela.getColumnModel().getColumn(0).setResizable(false);
        tabela.getColumnModel().getColumn(1).setResizable(false);
        tabela.getColumnModel().getColumn(2).setResizable(false);
        tabela.getColumnModel().getColumn(3).setResizable(false);
        tabela.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 


        // Ai voce pode escolher  
        tabela.getColumnModel().getColumn(0).setPreferredWidth(25);
        tabela.getColumnModel().getColumn(0).setWidth(25);
        tabela.getColumnModel().getColumn(0).setMinWidth(24);  
        tabela.getColumnModel().getColumn(0).setMaxWidth(25);  

        tabela.getColumnModel().getColumn(1).setPreferredWidth(275);
        tabela.getColumnModel().getColumn(1).setWidth(275);
        tabela.getColumnModel().getColumn(1).setMinWidth(274);  
        tabela.getColumnModel().getColumn(1).setMaxWidth(275);

        tabela.getColumnModel().getColumn(2).setPreferredWidth(300);
        tabela.getColumnModel().getColumn(2).setWidth(300);
        tabela.getColumnModel().getColumn(2).setMinWidth(300);  
        tabela.getColumnModel().getColumn(2).setMaxWidth(300);

        tabela.getColumnModel().getColumn(3).setPreferredWidth(100);
        tabela.getColumnModel().getColumn(3).setWidth(100);
        tabela.getColumnModel().getColumn(3).setMinWidth(100);  
        tabela.getColumnModel().getColumn(3).setMaxWidth(100);

        tabela.getColumnModel().getColumn(4).setPreferredWidth(100);
        tabela.getColumnModel().getColumn(4).setWidth(100);
        tabela.getColumnModel().getColumn(4).setMinWidth(100);  
        tabela.getColumnModel().getColumn(4).setMaxWidth(100);

        tabela.getColumnModel().getColumn(5).setPreferredWidth(250);
        tabela.getColumnModel().getColumn(5).setWidth(250);
        tabela.getColumnModel().getColumn(5).setMinWidth(250);  
        tabela.getColumnModel().getColumn(5).setMaxWidth(250);

        tabela.getColumnModel().getColumn(6).setPreferredWidth(300);
        tabela.getColumnModel().getColumn(6).setWidth(300);
        tabela.getColumnModel().getColumn(6).setMinWidth(300);  
        tabela.getColumnModel().getColumn(6).setMaxWidth(300);

        tabela.getColumnModel().getColumn(7).setPreferredWidth(85);
        tabela.getColumnModel().getColumn(7).setWidth(85);
        tabela.getColumnModel().getColumn(7).setMinWidth(85);  
        tabela.getColumnModel().getColumn(7).setMaxWidth(85);

        tabela.getColumnModel().getColumn(8).setPreferredWidth(100);
        tabela.getColumnModel().getColumn(8).setWidth(100);
        tabela.getColumnModel().getColumn(8).setMinWidth(100);  
        tabela.getColumnModel().getColumn(8).setMaxWidth(100);


        modeloTabela = (DefaultTableModel) tabela.getModel();


        //Adicionando Scroll a tabela
        JScrollPane scroll = new JScrollPane(tabela);
        tabela.setFillsViewportHeight(true);
        //Adicionando tamanho ao Scroll
        scroll.setPreferredSize(new Dimension(800,600));

        AlunosEsperaDAO dao = new AlunosEsperaDAO();
        AlunosEspera[] alunos = dao.listar(param_curso, param_status);

        panel_princ.setBorder(new TitledBorder("Alunos "+param_status+" de "+param_curso));
        //adicionando as linhas a JTable
        for(AlunosEspera aluno: alunos){
            modeloTabela.addRow(new Object[]{aluno.getId(),aluno.getNome(),aluno.getEndereco(),aluno.getTelFixo(),aluno.getTelMovel(),aluno.getEmail(),aluno.getCurso(),aluno.getDataCadastrada(),aluno.getStatus()});
        }

        tabela.getTableHeader().setReorderingAllowed(false);
        TableColumnModel modeloDaColuna3 = tabela.getColumnModel();

        panel_princ.setLayout(null);
        panel_princ.add(lbBuscar).setBounds(5,5,80,60);
        panel_princ.add(tfBuscar).setBounds(71, 41, 255, 20);
        panel_princ.add(btOk).setBounds(340, 40, 50, 20);
        btOk.addActionListener(new FrameListar.botoes());
        panel_princ.add(btVoltar).setBounds(30, 400, 230, 25);
        btVoltar.addActionListener(new FrameListar.botoes());
        panel_princ.add(btExcluir).setBounds(270, 400, 82, 25);
        panel_princ.add(btAlterar).setBounds(370, 400, 82, 25);
        panel_princ.add(btMatricular).setBounds(470, 400, 100, 25);
        panel_princ.add(scroll).setBounds(25, 75, 950, 300);

        add(panel_princ);
        panel_princ.setBounds(5, 5, 770, 500);

        tfBuscar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                AlunosEsperaDAO dao = new AlunosEsperaDAO();
                AlunosEspera[] alunos;
                alunos = dao.buscar(tfBuscar.getText());
                limpaTabela();
                //adicionando as linhas a JTable
                for(AlunosEspera aluno: alunos){
                    modeloTabela.addRow(new Object[]{aluno.getId(),aluno.getNome(),aluno.getEndereco(),aluno.getTelFixo(),aluno.getTelMovel(),aluno.getEmail(),aluno.getCurso()});
                }
            }
        });

        btExcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                if(tabela.getSelectedRowCount()==1) {
                    int id = (int) modeloTabela.getValueAt(tabela.getSelectedRow(), 0);
                    AlunosEsperaDAO dao = new AlunosEsperaDAO();
                    dao.deletar(id);
                    modeloTabela.removeRow(tabela.getSelectedRow());
                    JOptionPane.showMessageDialog(null, "Aluno Excluido");
                } else if(tabela.getSelectedRowCount()>1){
                    JOptionPane.showMessageDialog(null, "Mais de um aluno selecionado.\nSelecione apenas um(1)!");
                } else{
                    JOptionPane.showMessageDialog(null, "Nenhum Aluno selecionado!");
                }
            }
        });

        btMatricular.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                int contador = 0;
                while(tabela.getSelectedRowCount()!=0) {
                    if (modeloTabela.getValueAt(tabela.getSelectedRow(),8).equals("Matriculado")) {
                        JOptionPane.showMessageDialog(null,"Aluno "+modeloTabela.getValueAt(tabela.getSelectedRow(),1)+" já esta matriculado.");
                    }
                    else {
                        int id = (int) modeloTabela.getValueAt(tabela.getSelectedRow(), 0);
                        AlunosEsperaDAO dao = new AlunosEsperaDAO();
                        dao.matricular(id);
                        modeloTabela.removeRow(tabela.getSelectedRow());
                        JOptionPane.showMessageDialog(null, "Aluno(s) Matriculados!");
                    }
                    contador++;
                    if (contador > tabela.getSelectedRowCount()) 
                    {
                        break;
                    }
                }                
            }
        });

        btAlterar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                if(tabela.getSelectedRowCount()==1) {
                    AlunosEspera aluno = new AlunosEspera();

                    int    id           = (int)    modeloTabela.getValueAt(tabela.getSelectedRow(), 0);
                    String nome         = (String) modeloTabela.getValueAt(tabela.getSelectedRow(), 1);
                    String endereco     = (String) modeloTabela.getValueAt(tabela.getSelectedRow(), 2);
                    String TelFixo      = (String) modeloTabela.getValueAt(tabela.getSelectedRow(), 3);
                    String TelMovel     = (String) modeloTabela.getValueAt(tabela.getSelectedRow(), 4);
                    String email        = (String) modeloTabela.getValueAt(tabela.getSelectedRow(), 5);
                    String curso        = (String) modeloTabela.getValueAt(tabela.getSelectedRow(), 6);
                    String DataCadastro = (String) modeloTabela.getValueAt(tabela.getSelectedRow(), 7);
                    String status       = (String) modeloTabela.getValueAt(tabela.getSelectedRow(), 8);

                    aluno.setId(id);
                    aluno.setNome(nome);
                    aluno.setEndereco(endereco);
                    aluno.setTelFixo(TelFixo);
                    aluno.setTelMovel(TelMovel);
                    aluno.setEmail(email);
                    aluno.setCurso(curso);
                    aluno.setDataCadastrada(DataCadastro);
                    aluno.setStatus(status);                  
                    try {
                        new FrameAlterarAlunos(aluno);
                    } catch (ParseException ex) {
                        Logger.getLogger(FrameListar.class.getName()).log(Level.SEVERE, null, ex);
                    }
                } else if(tabela.getSelectedRowCount()>1){
                    JOptionPane.showMessageDialog(null, "Mais de um aluno selecionado.\nSelecione apenas um(1)!");
                } else{
                    JOptionPane.showMessageDialog(null, "Nenhum Aluno selecionado!");
                }
            }
        });
    }

    class botoes implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            if(e.getSource()==btOk) {
                AlunosEsperaDAO dao = new AlunosEsperaDAO();
                AlunosEspera[] alunos;
                alunos = dao.buscar(tfBuscar.getText());
                limpaTabela();
                //adicionando as linhas a JTable
                for(AlunosEspera aluno: alunos){
                    modeloTabela.addRow(new Object[]{aluno.getId(),aluno.getNome(),aluno.getEndereco(),aluno.getTelFixo(),aluno.getTelMovel(),aluno.getEmail(),aluno.getCurso()});
                }
            }
            else if(e.getSource()==btVoltar) {
                dispose();
            }
        }  
    }





    public void limpaTabela(){  
        modeloTabela = (DefaultTableModel)tabela.getModel();  

        while (modeloTabela.getRowCount() > 0){  
            modeloTabela.removeRow(0);                          
        }    
    }    
}
  • poste o codigo da consulta que o seu botão chama, concerteza ha algo errado la...

    Cristian Urbainski   09 de mai de 2013
  • Atualizarei no post.

    Thiago Henrique   09 de mai de 2013
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java mysql web ou faça a sua própria pergunta.