Erro ao buscar informações do banco de dados para um comboBox

Estou tentando fazer um comboBox que pegue as informações do banco só que está dando erro, ele cai no meu catch do DAO.
Gostaria de saber como eu posso depurar este erro.

A classe do DAO é está:

    public ArrayList busca() throws SQLException {
            ArrayList<ModelEtapas> lista = new ArrayList<>();
            try {
                this.conectar();
                this.setResultSet(this.getStatement().executeQuery("SELECT * FROM tbl_etapas;"));
                while (this.resultSet.next()) {

                    ModelEtapas eta = new ModelEtapas();
                    eta.setIdEtapa(this.resultSet.getInt("codigo"));
                    eta.setDescricao(this.resultSet.getString("descrição"));

                    lista.add(eta);
                }
            } catch (SQLException e) {
                JOptionPane.showMessageDialog(null, "Erro: " + e.getMessage(), "Alerta", 2);
            } finally {
                this.fecharConexao();
            }
            return lista;
        }

E minha função para preencher o comboBox é está:

public void preencher_comboBox() {
    try {
        DAOEtapas daoEtapas = new DAOEtapas();
        lista_etapas = daoEtapas.busca();

        for (int i = 0; i < lista_etapas.size(); i++) {

            jComboBox2.addItem(
                    String.valueOf(lista_etapas.get(i).getDescricao())
            );
        }
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, "Erro na busca");
    }
}

Quando eu tirei o try catch para tentar encontrar, aparece que está linha está retornando nulo:
** this.setResultSet(this.getStatement().executeQuery(“SELECT * FROM tbl_etapas;”)); **

Troca isso:

JOptionPane.showMessageDialog(null, "Erro na busca");

por isso:

e.printStackTrace();

roda o projeto e manda o erro

1 curtida
java.lang.NullPointerException
	at DAO.DAOEtapas.busca(DAOEtapas.java:39)
	at view.ViewParadas.preencher_comboBox(ViewParadas.java:181)
	at view.ViewParadas.<init>(ViewParadas.java:34)
	at view.Menu.jButton2ActionPerformed(Menu.java:80)
	at view.Menu.access$100(Menu.java:12)
	at view.Menu$2.actionPerformed(Menu.java:45)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6539)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
	at java.awt.Component.processEvent(Component.java:6304)
	at java.awt.Container.processEvent(Container.java:2239)
	at java.awt.Component.dispatchEventImpl(Component.java:4889)
	at java.awt.Container.dispatchEventImpl(Container.java:2297)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
	at java.awt.Container.dispatchEventImpl(Container.java:2283)
	at java.awt.Window.dispatchEventImpl(Window.java:2746)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
	at java.awt.EventQueue$4.run(EventQueue.java:733)
	at java.awt.EventQueue$4.run(EventQueue.java:731)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Linha nº39 é a linha que ta dando NullPointer?

1 curtida

Sim, porém não sei o que fazer, a linha é essa:
this.setResultSet(this.getStatement().executeQuery(“SELECT * FROM tbl_etapas;”));

Eu não gosto muito de usar esse tipo de conexão que vc ta usando, mas vc deveria fazer assim:

  Statement st = conn.createStatement();
  ResultSet rs = st.executeQuery(query);

  while (rs.next()){
     ...
  }

Só não entendi esse monte de this que você colocou

1 curtida

Então somos dois. Vejo direto a galera armazenando os Statements e os ResultSets em variáveis de instância.
Imagino que há algum tutorial famoso que ensina dessa forma podre. :frowning:

2 curtidas

Deu certo, muito obrigado.

Minha função busca no DAO ficou a seguinte:

public ArrayList busca() throws SQLException {

        ArrayList<ModelEtapas> lista = new ArrayList<>();

        try {
            conectar();

           //this.setResultSet(this.getStatement().executeQuery("SELECT * FROM tbl_etapas;"));
            
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery("SELECT * FROM tbl_etapas;");
            

            //recupera o ultimo id inserido
            while (rs.next()) {

                ModelEtapas eta = new ModelEtapas();
                eta.setIdEtapa(rs.getInt("pk_id_codigo"));
                eta.setDescricao(rs.getString("eta_nome"));

                lista.add(eta);
            }

        } catch (SQLException e) {
            JOptionPane.showMessageDialog(null, "Erro: " + e.getMessage(), "Alerta", 2);
        } finally {
            fecharConexao();
        }
        return lista;
    }

Removi os this também.

Muito obrigado, novamente!

1 curtida

Não tenho tanto conhecimento técnico ainda nessa parte de conexões e POO também, estou inciando agora e como você disse sobre algum tutorial, no caso fui realizando este código com umas vídeo aulas que estava assistindo.

Mas de qualquer forma, obrigado também por me notificar que está forma não é a maneira adequada.

1 curtida