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

8 respostas Resolvido
java
V

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;”)); **

8 Respostas

rodriguesabner

Troca isso:

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

por isso:

e.printStackTrace();

roda o projeto e manda o erro

V
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)
rodriguesabner

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

V

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

rodriguesabner
Solucao aceita

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

staroski

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:

V

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!

V

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.

Criado 21 de agosto de 2019
Ultima resposta 21 de ago. de 2019
Respostas 8
Participantes 3