[Resolvido] Listar dados de uma tabela MySql num Jcombobox

11 respostas
fabio.argenton

Fala Galera se puderem me ajudar segue minha dúvida:

Tenho uma tabela Status no banco MySql onde eu tenho dois campos “cod” e “Status”;

No projeto Java tenho a camada bean onde tenho a entidade (Classe) RdiStatus:

package br.com.rdi.bean;

public class RdiStatus {

    int cod;
    String Status;

    //Método para exibir tudo que tem na classe
    @Override
    public String toString() {
        return "RdiStatus{" + "cod=" + cod + ", Status=" + Status + '}';
    }

    //Construtor Vazio
    public RdiStatus() {
    }

    //Contrutor que recebe parametros
    public RdiStatus(int cod, String Status) {
        this.cod = cod;
        this.Status = Status;
    }

    //Get and Set
    public int getCod() {
        return cod;
    }

    public void setCod(int cod) {
        this.cod = cod;
    }

    public String getStatus() {
        return Status;
    }

    public void setStatus(String Status) {
        this.Status = Status;
    }
}

Tenho a camada dao onde possui a classe (RdiStatusDAO) responsável por todos os métodos:

package br.com.rdi.dao;

import br.com.rdi.bean.RdiStatus;
import br.com.rdi.db.ConnectionMySQL;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;

public class RdiStatusDAO {

    //Método Inserir um registro na tabela RdiStatus(Insert - "C"RUD)
    public void inserir(RdiStatus rdi) throws SQLException {
        String sql = "INSERT INTO rdiStatus (Status) VALUES (?)";
        com.mysql.jdbc.Connection conn = ConnectionMySQL.getConnection();
        try {
            PreparedStatement pstm = conn.prepareStatement(sql);
            pstm.setString(1, rdi.getStatus());
            pstm.execute();
            pstm.close();
            JOptionPane.showMessageDialog(null, "Critério cadastrado!");
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex);
        }
    }

    //Metodo para Alterar dados de um registro da tabela RdiStatus (Update - CR"U"D)
    public void alterar(RdiStatus rdi) throws SQLException {
        String sql = "UPDATE rdiStatus SET Status=? WHERE cod=?";
        com.mysql.jdbc.Connection conn = ConnectionMySQL.getConnection();
        try {
            PreparedStatement pstm = conn.prepareStatement(sql);
            pstm.setString(1, rdi.getStatus());
            pstm.setInt(2, rdi.getCod());
            pstm.executeUpdate();
            pstm.close();
            JOptionPane.showMessageDialog(null, "Critério alterada com sucesso!");
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex);
        }
    }

    //Metodo para retornar todas os registros da tabela RdiStatus (Read - C"R"UD)
    public List<RdiStatus> obterTabela() {
        List<RdiStatus> listaRdiStatus = new ArrayList<>();
        Connection conn = ConnectionMySQL.getConnection();
        Statement stmt = null;
        ResultSet rs = null;
        String sql = "SELECT * FROM rdiStatus";
        try {
            stmt = conn.createStatement();
            rs = stmt.executeQuery(sql);
            while (rs.next()) {
                RdiStatus rdi = new RdiStatus();
                rdi.setCod(rs.getInt("cod"));
                rdi.setStatus(rs.getString("Status"));
                listaRdiStatus.add(rdi);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ConnectionMySQL.close((com.mysql.jdbc.Connection) conn, stmt, rs);
        }
        return listaRdiStatus;
    }

    //Metodo para retornar apenas um registro da tabela RdiStatus (Read - C"R"UD)
    @SuppressWarnings("CallToThreadDumpStack")
    public RdiStatus obterRdi(int id) {
        RdiStatus rdi = new RdiStatus();
        Connection conn = ConnectionMySQL.getConnection();
        Statement stmt = null;
        ResultSet rs = null;
        String sql = "SELECT * FROM rdiStatus WHERE cod = " + id;
        try {
            stmt = conn.createStatement();
            rs = stmt.executeQuery(sql);
            if (rs.next()) {
                rdi.setCod(rs.getInt("cod"));
                rdi.setStatus(rs.getString("Status"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ConnectionMySQL.close((com.mysql.jdbc.Connection) conn, stmt, rs);
        }
        return rdi;
    }

    //Metodo para Deletar um registro da tabela RdiStatus (Delete - CRU"D")
    public boolean deletar(int id) {
        boolean ret = false;
        RdiStatus rdi = obterRdi(id);
        if (rdi.getCod() > 0) {
            Connection conn = ConnectionMySQL.getConnection();
            Statement stmt = null;
            String sql = "DELETE FROM rdiStatus WHERE cod = " + id;
            try {
                stmt = conn.createStatement();
                stmt.executeUpdate(sql);
                ret = true;
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                ConnectionMySQL.close((com.mysql.jdbc.Connection) conn, stmt);
            }
        }
        return ret;
    }
}

E por fim tenho minha camada view onde possui o formulário que contém os JtextField, Jtable e os JcomboBox.
Quero que meu JcomboBox busque os dados da tabela status.
Obs.: Meu JcomboBox é um componente da paleta Swing (Cliquei e arrastei pro formulário)

Ja pesquisei muito sobre, mas não encontrei nada que seja parecido com meu código (Camadas), galera me ajuda ai.

11 Respostas

J

Se voce quer Listar dados de uma tabela MySql num Jcombobox .Basta criar um metodo.

Aqui esta o código, não sei se e exatamente o que você quer.

public void carregaComboBox()  
    {  
            try  
            {  
             
                jComboBoxCliente.addItem("");
                Connection conn;  
                conn = conexaoBD.getConexao();//classse de conexao com banco
                Statement st = conn.createStatement();  
                ResultSet rs = st.executeQuery("SELECT cliente.nome FROM cliente ORDER BY nome" );  
                while(rs.next())  
                { 
               
                    jComboBoxCliente.addItem(rs.getString("nome"));  
                }  
                rs.close();  
                conn.close();  
            }  
            catch(Exception e)  
            {  
                JOptionPane.showMessageDialog(null,   
                        "Ocorreu erro ao carregar a Combo Box", "Erro",  
                        JOptionPane.ERROR_MESSAGE);  
         }       
     
    }
]

Ai você coloca o método em baixo do initComponents().

fabio.argenton

Cara, valeu mesmo, deu certo é justamente isso que estava procurando só não estava conseguindo visualizar, pois na net tem tanta coisa e cada um diferente do outro e atrapalhou toda minha lógica. Valeu!

Meu método ficou assim:

//Metodo para preencher o JcomboBox Status
    public void carregaStatus() {
        try {
            txtStatus.addItem("");
            Connection conn = ConnectionMySQL.getConnection();  
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery("SELECT Status FROM rdistatus");
            while (rs.next()) {
                txtStatus.addItem(rs.getString("Status"));
            }
            rs.close();
            conn.close();
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,
                    "Ocorreu erro ao carregar a Combo Box", "Erro",
                    JOptionPane.ERROR_MESSAGE);
        }
    }
P

Ola Fabio,

podes-me so dizer que variavel é a txtstatus?

2 duvida
como chamastes este teu codigo na classe onde se encontra a combox?

Obrigado

L

Ou você pode aproveitar o metodo da sua classe dao que já retorna uma lista com os dados do seu banco e dentro da sua view criar um metodo que itere essa lista e adicione no combo box.

assim:

private void populaBox(){
   /*suaJComboBox é uma ilustração para o nome da sua combo box. verifique qual nome está declarado no seu projeto e altere*/

   /*caso você não tenha instanciado a classe ainda na sua view, se você for usar essa classe dao em outras partes da view faça no construtor*/
     RdiStatusDAO statusDAO = new RdiStatusDAO();
     List<RdiStatus> lista = statusDAO.obterTabela();
     suaJComboBox.addItem("");  
     for(int i=0;i<lista.size();i++){
           /*como eu não sei qual atributo da classe RdiStatus você quer que apareça na combo 
              eu presumi que seria o status, caso seja o código é  alterar o getStatus() por getCod() */
         suaJComboBox.addItem(lista.get(i).getStatus());
     }
}

Com esse metodo você não ira fugir da arquitetura do seu projeto(camadas) já que houve a separação da interface e do modelo.

L

pmachado76:
Ola Fabio,

podes-me so dizer que variavel é a txtstatus?

2 duvida
como chamastes este teu codigo na classe onde se encontra a combox?

Obrigado

Não sou o Fabio mas posso te ajudar.

  • A variável txtstatus é a JComboBox(combo box), no caso a sua combo box provavelmente terá um nome diferente .
  • Uma dos vários pontos do seu código aonde pode ser feita a chamada do metodo.
/*construtor da sua classe - *SuaClasse vc substitui pelo nome da classe do seu JFrame*/
public SuaClasse(){
  initComponents();/* esse metodo vai vir por padrão caso você esteja utilizando o netbeans ou você tenha criado ele*/
  carregarBox();/*aqui é feita a chamada do metodo. o nome do metodo você é  quem define usei este como exemplo.*/
  
}

private void carregarBox(){
  //... código aqui
}
P

Ola lucas antes de mais obrigado, no entanto podes me ajudar, peço desculpa mas sou iniciante ainda no java.

o meu metodo carregabox esta numa classe diferente onde se encontra a combo box, sendo assim ele nao reconhce a variavel com o nome da combos (exemplo: combox.additem)

podes dizer como passo chamo essa combox de uma outra classe(ou outra alternativa)?

lucas93lange:
pmachado76:
Ola Fabio,

podes-me so dizer que variavel é a txtstatus?

2 duvida
como chamastes este teu codigo na classe onde se encontra a combox?

Obrigado

Não sou o Fabio mas posso te ajudar.

- A variável txtstatus é a JComboBox(combo box), no caso a sua combo box provavelmente terá um nome diferente . - Uma dos vários pontos do seu código aonde pode ser feita a chamada do metodo.
/*construtor da sua classe - *SuaClasse vc substitui pelo nome da classe do seu JFrame*/
public SuaClasse(){
  initComponents();/* esse metodo vai vir por padrão caso você esteja utilizando o netbeans ou você tenha criado ele*/
  carregarBox();/*aqui é feita a chamada do metodo. o nome do metodo você é  quem define usei este como exemplo.*/
  
}

private void carregarBox(){
  //... código aqui
}
L

passa via parâmetro o seu jcombobox, assim:

//o nome que eu coloquei na comboBox abaixo é só um exemplo continua usando o que está no seu projeto.
JComboBox suaCombo = new JComboBox();//só para ilustrar
SuaClasse suaClasse = new SuaClasse();//exemplo de nome para a sua classe utilitária 
suaClasse.carregaBox(suaCombo);//aqui é que ocorre a passagem da sua JComboBox via parâmetro para a outra classe

na sua classe utilitária ficará semelhante a isso:

public void carregaBox(JComboBox combo){/* aqui o nome da variável(no caso combo) pode ser diferente da instanciada na outra classe*/
      combo.addItem("");//exemplo de interação com a sua combobox
      //seu código...       
}
P

Ok Lucas,

é isso mesmo, esta a funcionar corretamente.

muito obrigado

lucas93lange:
passa via parâmetro o seu jcombobox, assim:

//o nome que eu coloquei na comboBox abaixo é só um exemplo continua usando o que está no seu projeto.
JComboBox suaCombo = new JComboBox();//só para ilustrar
SuaClasse suaClasse = new SuaClasse();//exemplo de nome para a sua classe utilitária 
suaClasse.carregaBox(suaCombo);//aqui é que ocorre a passagem da sua JComboBox via parâmetro para a outra classe

na sua classe utilitária ficará semelhante a isso:

public void carregaBox(JComboBox combo){/* aqui o nome da variável(no caso combo) pode ser diferente da instanciada na outra classe*/
      combo.addItem("");//exemplo de interação com a sua combobox
      //seu código...       
}

S

Obrigado. Também estava com a mesma dúvida do colega Fabio

Israelitalo

Olá, pessoal!

Primeiramente quero agradecer pela disponibilidade e esclarecimentos que todos forneceram!

Quero compartilhar com vocês como ficou meu código.

Método na classe Dao:

public void carregarJcomboBox(JComboBox comboBox){

String sql = "SELECT impressora.modelo, setor.nome from impressora, setor WHERE impressora.id_setor = setor.id_setor";
    
    PreparedStatement stmt = null;
    ResultSet rs = null;
    
    try{
        stmt = con.prepareStatement(sql);
        rs = stmt.executeQuery();
        while(rs.next()){
            String modelo = (rs.getString("modelo"));
            String setor = (rs.getString("nome"));
            comboBox.addItem(modelo + " / " + setor);
        }
        ConexaoJdbc.closeConnection(con, stmt);
    }
    catch(Exception ex){
        JOptionPane.showMessageDialog(null,
        "Ocorreu erro ao carregar a Combo Box", "Erro",
        JOptionPane.ERROR_MESSAGE);
    }
}

Como chamei-o na JDialog:

public AdicionarCartuchoJdialog(java.awt.Frame parent, boolean modal) {
    super(parent, modal);
    initComponents();
    txtQuantidade.setText("0");
    CartuchoDao cd = new CartuchoDao(); //Criando objeto da classe Dao, para poder chamar o método carregarJcomboBox.
    cd.carregarJcomboBox(jComboBoxImpressora);
    
}

Obrigado! :smiley:

smatt

@Israelitalo bem vindo ao GUJ. Este tópico é antigo. Se você achou nele a solução para o seu problema, excelente! Mas por gentileza, não ressucite tópicos antigos, pois assim, tópicos novos perdem a prioridade na lista de tópicos recentes para tópicos antigos que já estão solucionados. Já foi a terceira ressureição deste tópico, pois ele era de 2013, ai um usuário em 2015 abriu novamente, em 2017 novamente e você agora em 2019. Essa atitude atrapalha outros colegas. Então quando for responder algum tópico, certifique-se de que ele não seja antigo, ta bom?

(PS.: ressucitar é a ação de responder tópicos “mortos” (muito antigos), daí ele vai para o topo de tópicos recentes, atrapalhando de fato tópicos em aberto de outros colegas.)

Criado 20 de julho de 2013
Ultima resposta 18 de jun. de 2019
Respostas 11
Participantes 7