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.
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);
}
}
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.
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./
//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=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...
}
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);
}
@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.)