[Resolvido] Listar dados de uma tabela MySql num Jcombobox

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.

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.

[code]
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);  
     }       
 
}  

[/code]]

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

1 curtida

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);
        }
    }

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

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 é só 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.

[quote=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[/quote]

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
}

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)?

[quote=lucas93lange][quote=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[/quote]

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.

[code]
/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
}
[/code][/quote]

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...       
}

Ok Lucas,

é isso mesmo, esta a funcionar corretamente.

muito obrigado

[quote=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...       
}

[/quote]

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

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:

@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.)