Erro em containers da tabela do banco de dados

2 respostas
D

Não sei bem se o erro é gráfico ou se foi porque eu adicionei um getText() no field no query para capturar os dados digitados.

vejam as excessões:

java.lang.NullPointerException
	at java.awt.Container.addImpl(Container.java:1031)
	at java.awt.Container.add(Container.java:903)
	at consulta.ptela1(consulta.java:123)
	at consulta.<init>(consulta.java:81)
	at consulta.main(consulta.java:69)

Agora o código:

public class consulta extends JFrame {
     
      private Font f = new Font("Arial", Font.PLAIN, 11);
      private Connection con, con2;   
      private JTable tabela, tabela2; 
      private JScrollPane scroller, scroller2;
      private JTabbedPane abas;
      private JPanel p1, p2;  
      
      JLabel labCons1;
         JTextField fieldCons1;
         JButton botOK1;
         
      JLabel labCons2;
         JTextField fieldCons2;
         JButton botOK2;
      
     public static void main(String[] args) {
         try { 
      //UIManager.setLookAndFeel("com.sun.java.swing.plaf.metal.MetalLookAndFeel");
         UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        } catch (UnsupportedLookAndFeelException ex) {
            ex.printStackTrace();
        } catch (IllegalAccessException ex) {
            ex.printStackTrace();
        } catch (InstantiationException ex) {
            ex.printStackTrace();
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        }
        
        
           consulta telaConsulta = new consulta();
                    telaConsulta.setVisible(true);
                }
                
         
     public consulta() {
         super("Acompanhamento do gado");
         setSize(750, 400);
         setVisible(true);
         
         abas = new JTabbedPane();
         abas.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
         abas.addTab("Visualizar dados", null, ptela1(), "Lista de gado cadastrado");
       //  abas.addTab("Vacinas", null, ptela2(), "Lista de vacinas");
    
         this.add(abas);
         
        }
         
     private JComponent ptela1() {
       p1 = new JPanel(new BorderLayout());
       
       JPanel p1Consulta = new JPanel(new FlowLayout());
          labCons1 = new JLabel("Pesquisar por código");
          fieldCons1 = new JTextField(15);
          botOK1 = new JButton("OK");
          botOK1.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                  buscaTabela();
                }
            });
            
         p1Consulta.add(labCons1);
         p1Consulta.add(fieldCons1);
         p1Consulta.add(botOK1);
         
       
       JPanel pBotoes = new JPanel(new BorderLayout());
       
       JPanel b2Bot = new JPanel(new BorderLayout());
       JButton botSalvar = new JButton("Salvar");
       JButton botImprimir = new JButton("Imprimir");
       b2Bot.add(botSalvar, BorderLayout.CENTER);
       b2Bot.add(botImprimir, BorderLayout.EAST);
       
       JPanel botAtual = new JPanel(new BorderLayout());
       JButton botAtualizar = new JButton("Atualizar");
       botAtual.add(botAtualizar, BorderLayout.WEST);
       
       pBotoes.add(b2Bot, BorderLayout.EAST);
       pBotoes.add(botAtual, BorderLayout.WEST);
    

      p1.add(p1Consulta, BorderLayout.NORTH);
      p1.add(scroller, BorderLayout.CENTER);
      p1.add(pBotoes, BorderLayout.SOUTH); 
         
        // buscaTabela();   // chamada do método "buscaTabela()" 
         
         return p1;
      }   
      
   private void buscaTabela() {   
    // inicialização de conexão ao banco  ****
       String url = "jdbc:mysql://localhost/gado";   
       String usuario = "root";   
       String senha   = "2017";   
       try {   
            Class.forName("com.mysql.jdbc.Driver");   
            con = DriverManager.getConnection(url, usuario, senha);   
         } catch (Exception e) {   
            JOptionPane.showMessageDialog(null, "Conexão não estabelecida!\n" + e, 
            "Erro", JOptionPane.ERROR_MESSAGE);   
         }   
         
     Statement st;   
     ResultSet rs;   
     try {   
       Vector cabecalho = new Vector();
       Vector linhas = new Vector();
        st = con.createStatement();   

 // Selecionando vacinas  ****
       String tableName = "tabela1";
        rs = st  .executeQuery("select codGado, nomeGado, idadeGado, datInsemin, "+
                   "datParto, datSecagem, sexoCria, datVacina FROM " + tableName+ "WHERE codGado = '" + fieldCons1.getText() + "';");   // foi o que eu adicionei por último, antes de apontar excessões
      
            rs.next();  
            
            ResultSetMetaData rsmd = rs.getMetaData();
            
            for (int i = 1; i <= rsmd.getColumnCount(); ++i)   
               cabecalho.addElement(rsmd.getColumnName(i)); 
               
            do {   
               linhas.addElement(proximaLinha(rs, rsmd)); 
            } while (rs.next());  
            
            tabela = new JTable(linhas, cabecalho);
            
            tabela.setFont( f );
            
            scroller = new JScrollPane(tabela);  /*não tem como eu adicionar o scroller
 a partir daqui, por isso que adicionei no [b]JComponent ptela1[/b]  */
            
            validate();   
            st.close(); 
            
         } catch (SQLException sqlex) {
             
             JOptionPane.showMessageDialog(this, "Erro ao retornar dado!\n" + sqlex,
             "Erro", JOptionPane.ERROR_MESSAGE);
             
         }   
         
      }   
  
          
      private Vector proximaLinha(ResultSet rs, ResultSetMetaData rsmd) {   
          
         Vector LinhaAtual = new Vector(); 
         
         try {   

                  LinhaAtual.addElement(rs.getInt("codGado")); 

                  LinhaAtual.addElement(rs.getString("nomeGado"));

                  LinhaAtual.addElement(rs.getInt("idadeGado"));  

                  LinhaAtual.addElement(rs.getString("datInsemin"));   

                  LinhaAtual.addElement(rs.getString("datParto"));  

                  LinhaAtual.addElement(rs.getString("datSecagem"));  

                  LinhaAtual.addElement(rs.getString("sexoCria")); 
                  
                  LinhaAtual.addElement(rs.getString("datVacina"));
            
        } catch (SQLException sqlex) { 
             JOptionPane.showMessageDialog(this, "Erro ao retornar dado!\n" + sqlex,
             "Erro", JOptionPane.ERROR_MESSAGE);
             
        } catch (Exception ex) { 
             JOptionPane.showMessageDialog(this, "Erro inesperado!\n" + ex,
             "Erro", JOptionPane.ERROR_MESSAGE);
       } 
       
         return LinhaAtual;   
         
      }  // fim do vector

A segunda aba é praticamente a mesma coisa, só muda a tabela do banco.

Acho que é no scroller mesmo mas antes não apontava excessoes, por isso não tenho certeza.

Eu preciso de uma ajuda com isso.
Abraços.
Obrigado.

2 Respostas

D

Entendi o que eu fiz de errado acima.

Depois de repensar muito cheguei a uma conclusão:

// o erro estava aqui:

p1.add(p1Consulta, BorderLayout.NORTH);
      //p1.add(scroller, BorderLayout.CENTER);  // *** foi adicionado no método "buscaTabela"
      p1.add(pBotoes, BorderLayout.SOUTH);
Foi adicionado bem aqui:
tabela = new JTable(linhas, cabecalho);
            tabela.setFont( f );
            
            scroller = new JScrollPane(tabela); 
            p1.add(scroller, BorderLayout.CENTER);  /** achei que se adicionasse aqui, apontaria 
                    excesão mas não.   Agora está tudo certo.
            
            validate();   
            st.close();

Só tem um problema na segunda aba.
Está apontando NullPointerException :

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at consulta.buscaTabela2(consulta.java:324)
	at consulta.access$100(consulta.java:37)
	at consulta$2.actionPerformed(consulta.java:243)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.Component.processMouseEvent(Component.java:6038)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
	at java.awt.Component.processEvent(Component.java:5803)
	at java.awt.Container.processEvent(Container.java:2058)
	at java.awt.Component.dispatchEventImpl(Component.java:4410)
	at java.awt.Container.dispatchEventImpl(Container.java:2116)
	at java.awt.Component.dispatchEvent(Component.java:4240)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
	at java.awt.Container.dispatchEventImpl(Container.java:2102)
	at java.awt.Window.dispatchEventImpl(Window.java:2429)
	at java.awt.Component.dispatchEvent(Component.java:4240)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
O banco da tabela2 é esse:
//  Tabela2: "Vacinas" 
  
   create table vacinas (codVacina int(8) not null auto_increment, nomeVacina varchar(30),
  diaVacina int(2), mesVacina varchar(10), anoVacina int(4),
 primary key (codVacina));

A segunda aba é a mesma coisa que a primeira,  muda a tabela do banco.
Vejam a segunda aba como fica:
[code]
private JComponent ptela2() {
          
       JPanel p2Consulta = new JPanel(new FlowLayout());
          labCons2 = new JLabel("Código do gado");
           fieldCons2 = new JTextField(15);
           //fieldCons2.setText("");
          botOK2 = new JButton("OK");
          botOK2.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                  buscaTabela2();
                }
            });  
            
         p2Consulta.add(labCons2);
         p2Consulta.add(fieldCons2);
         p2Consulta.add(botOK2);
         
         
          JPanel p2 = new JPanel(new BorderLayout());
          
          JPanel pBotoes2 = new JPanel(new BorderLayout());
          
       JPanel p2Bot2 = new JPanel(new BorderLayout());
       JButton botSalvar2 = new JButton("Salvar");
       JButton botImprimir2 = new JButton("Imprimir");
       p2Bot2.add(botSalvar2, BorderLayout.WEST);
       p2Bot2.add(botImprimir2, BorderLayout.EAST);
       
       JPanel pBotAtual2 = new JPanel(new BorderLayout());
       JButton bAtual2 = new JButton("Atualizar");
       pBotAtual2.add(bAtual2, BorderLayout.WEST);
       
       pBotoes2.add(pBotAtual2, BorderLayout.WEST);
       pBotoes2.add(p2Bot2, BorderLayout.EAST);
   
         
       /**  buscaTabela2();   // chamada do método "buscaTabela2()"
        *  será chamado através do texto digitado no textField2 e pressionado o botão "ok2"
        */
         
         p2.add(p2Consulta, BorderLayout.NORTH);
   // p2.add(scroller2, BorderLayout.CENTER);  foi adicionado ao método "buscaTabela2", pois causava a excessão: "NullPointerException".
         p2.add(pBotoes2, BorderLayout.SOUTH); 
      
         //return tabela2;  // se fosse apenas a tabela e nada mais
         return p2;
      }   
            
      
  private void buscaTabela2() {   
    /** inicialização de conexão ao banco  ****/
      String url = "jdbc:mysql://localhost/gado";   
      String usuario = "root";   
      String senha   = "2017";   
      try {   
         Class.forName("com.mysql.jdbc.Driver");   
          con2 = DriverManager.getConnection(url, usuario, senha);   
       } catch (Exception e) {   
          JOptionPane.showMessageDialog(null, "Conexão não estabelecida!\n" + e, 
          "Erro", JOptionPane.ERROR_MESSAGE);   
       }   
         
     Statement st2;   
     ResultSet rs2;   
     try {   
       Vector cabecalho2 = new Vector();
       Vector linhas2 = new Vector();
        st2 = con2.createStatement();   

 // Selecionando apenas vacinas  ****
        String tableName2 = "vacinas";
        rs2 = st2  .executeQuery("SELECT codVacina, nomeVacina, diaVacina, mesVacina, anoVacina FROM " +
        tableName2 + " WHERE codVacina = " + fieldCons2.getText() + ";");
        //"Vacinas v WHERE v.codproduto NOT IN (SELECT v.codprod FROM vendas v) ");
        
            rs2.next();  
            
            ResultSetMetaData rsmd2 = rs2.getMetaData();
            
            for (int i = 1; i <= rsmd2.getColumnCount(); ++i)   
               cabecalho2.addElement(rsmd2.getColumnName(i)); 
               
            do {   
               linhas2.addElement(proximaLinha2(rs2, rsmd2)); 
            } while (rs2.next());  
            
            tabela2 = new JTable(linhas2, cabecalho2);
            tabela2.setFont( f );
            
            scroller2 = new JScrollPane(tabela2);       
            p2.add(scroller2, BorderLayout.CENTER);
            
            validate();   
            st2.close(); 
            
         } catch (SQLException sqlex) {
             
             JOptionPane.showMessageDialog(this, "Erro ao retornar dado!\n" + sqlex,
             "Erro", JOptionPane.ERROR_MESSAGE);
             
         }   
         
      }   
  
          
      private Vector proximaLinha2(ResultSet rs, ResultSetMetaData rsmd) {   
          
         Vector LinhaAtual2 = new Vector(); 
         
         try {   

                  LinhaAtual2.addElement(rs.getInt("codVacina")); 

                  LinhaAtual2.addElement(rs.getString("nomeVacina"));

                  LinhaAtual2.addElement(rs.getInt("diaVacina"));  

                  LinhaAtual2.addElement(rs.getString("mesVacina"));   

                  LinhaAtual2.addElement(rs.getInt("anoVacina"));  

            
        } catch (SQLException sqlex) { 
             JOptionPane.showMessageDialog(this, "Erro ao retornar dado!\n" + sqlex,
             "Erro", JOptionPane.ERROR_MESSAGE);
             
        } catch (Exception ex) { 
             JOptionPane.showMessageDialog(this, "Erro inesperado!\n" + ex,
             "Erro", JOptionPane.ERROR_MESSAGE);
       } 
       
         return LinhaAtual2;   
         
      }  // fim do vector

Eu preciso resolver isso. Agradeceria por uma ajuda.

Abraços.

Obrigado.

D

Já resolvi.

Criado 1 de setembro de 2008
Ultima resposta 3 de set. de 2008
Respostas 2
Participantes 1