Problema com popular JTable com relacionamento

17 respostas
jeff021

Olá boa noite, estou tendo um problema para povoar uma Jtable com um relacionamento que eu fiz.
Criei um CRUD de aluno e outro de Turma, logo em seguida criei uma janela onde vou adicionar alunos em turmas. Fiz da seguinte forma.

Model

package br.com.jeff.model.bean;

/**
*

  • @author jeff-
    */
    public class ModelTurmaAluno {

    private AlunoModel aluno;
    private TurmaModel turma;

    public AlunoModel getAluno() {
    
    return aluno;
    
    }
    
    public void setAluno(AlunoModel aluno) {
    
    this.aluno = aluno;
    
    }
    
    public TurmaModel getTurma() {
    
    return turma;
    
    }
    
    public void setTurma(TurmaModel turma) {
    
    this.turma = turma;
    
    }
    

}

class DAO

package br.com.jeff.model.dao;

import br.com.jeff.factory.ConnectionFactory;

import br.com.jeff.model.bean.ModelTurmaAluno;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import java.util.logging.Level;

import java.util.logging.Logger;

import javax.swing.JOptionPane;

/**
*

  • @author jeff-
    */
    public class AlunoTurmaDAO {

    public void create(ModelTurmaAluno mta) {
    
    Connection con = ConnectionFactory.getConnection();
    
    PreparedStatement stmt = null;
    
    try {
    
    stmt = con.prepareStatement(insert into aluno_turma(id_aluno_turma,id_turma_aluno)values(?,?));
    
    stmt.setInt(1, mta.getAluno().getCodigo());
    
    stmt.setInt(2, mta.getTurma().getCodigo());
    
    stmt.executeUpdate();
    
    JOptionPane.showMessageDialog(null, Dados inseridos com sucesso!);
    
    } catch (SQLException ex) {
    
    JOptionPane.showMessageDialog(null, ex.getMessage());
    
    } finally {
    
    ConnectionFactory.closeConnection(con, stmt);
    
    }
    
    }
    
    public List read1() {
    
    Connection con = ConnectionFactory.getConnection();
    
    PreparedStatement stmt = null;
    
    ResultSet rs = null;
    
    List<ModelTurmaAluno> turmaalunos = new ArrayList<>();
    
     try {
         stmt = con.prepareStatement("select * from aluno_turma order by id_aluno_turma");
         rs = stmt.executeQuery();
         while (rs.next()) {                
             
             ModelTurmaAluno model = new ModelTurmaAluno();
             model.setAluno(rs.getString("id_aluno_turma"));            Aqui nessa parte que estou com dificuldade
             
         }
    
     } catch (SQLException ex) {
         Logger.getLogger(AlunoTurmaDAO.class.getName()).log(Level.SEVERE, null, ex);
     }
    
     return null;
    

    }

}

View

package br.com.jeff.view;

import br.com.jeff.model.bean.AlunoModel;

import br.com.jeff.model.bean.ModelTurmaAluno;

import br.com.jeff.model.bean.TurmaModel;

import br.com.jeff.model.dao.AlunoDAO;

import br.com.jeff.model.dao.AlunoTurmaDAO;

import br.com.jeff.model.dao.TurmaDAO;

import java.util.ArrayList;

import java.util.List;

/**
*

  • @author jeff-
    */
    public class FrmAlunoTurma extends javax.swing.JFrame {

    public FrmAlunoTurma() {
    initComponents();

    List<AlunoModel> listaAluno = new ArrayList<>();
    
     AlunoDAO alunoDao = new AlunoDAO();
     listaAluno = alunoDao.read();
    
     for (AlunoModel al : listaAluno) {
         cb_aluno.addItem(al.getNome());
     }
    
     List<TurmaModel> listaTurma = new ArrayList<>();
    
     TurmaDAO turmaDao = new TurmaDAO();
     listaTurma = turmaDao.read();
    
     for (TurmaModel tm : listaTurma) {
         cb_turma.addItem(tm.getDescricao());
     }
    

    }

    /**

    • This method is called from within the constructor to initialize the form.

    • WARNING: Do NOT modify this code. The content of this method is always

    • regenerated by the Form Editor.
      
      */
      
      @SuppressWarnings(unchecked)
      
      // 
      
      private void initComponents() {
      
      cb_aluno = new javax.swing.JComboBox<>();
      
      cb_turma = new javax.swing.JComboBox<>();
      
      bt_salvar = new javax.swing.JButton();
      
      jLabel1 = new javax.swing.JLabel();
      
      jLabel2 = new javax.swing.JLabel();
      
      jScrollPane1 = new javax.swing.JScrollPane();
      
      tabelaTurmaAluno = new javax.swing.JTable();
      

      setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

      bt_salvar.setText(Salvar);
      
      bt_salvar.addActionListener(new java.awt.event.ActionListener() {
      
      public void actionPerformed(java.awt.event.ActionEvent evt) {
      
      bt_salvarActionPerformed(evt);
      
      }
      
      });
      

      jLabel1.setText(“Aluno.:”);

      jLabel2.setText(“Turma.:”);

      tabelaTurmaAluno.setModel(new javax.swing.table.DefaultTableModel(
      
      new Object [][] {
      
      {null, null},
      
      {null, null},
      
      {null, null},
      
      {null, null}
      
      },
      
      new String [] {
      
      Title 1, Title 2
      
      }
      
      ));
      
      jScrollPane1.setViewportView(tabelaTurmaAluno);
      
      javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
      
      getContentPane().setLayout(layout);
      
      layout.setHorizontalGroup(
      
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      
      .addGroup(layout.createSequentialGroup()
      
      .addGap(34, 34, 34)
      
      .addComponent(bt_salvar)
      
      .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
      
      .addGroup(layout.createSequentialGroup()
      
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      
      .addGroup(layout.createSequentialGroup()
      
      .addGap(18, 18, 18)
      
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
      
      .addComponent(cb_turma, 0, 153, Short.MAX_VALUE)
      
      .addComponent(cb_aluno, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
      
      .addGroup(layout.createSequentialGroup()
      
      .addGap(35, 35, 35)
      
      .addComponent(jLabel1))
      
      .addGroup(layout.createSequentialGroup()
      
      .addGap(44, 44, 44)
      
      .addComponent(jLabel2)))
      
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 62, Short.MAX_VALUE)
      
      .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
      
      .addGap(33, 33, 33))
      
      );
      
      layout.setVerticalGroup(
      
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      
      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
      
      .addGap(42, 42, 42)
      
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      
      .addGroup(layout.createSequentialGroup()
      
      .addComponent(jLabel1)
      
      .addGap(18, 18, 18)
      
      .addComponent(cb_aluno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
      
      .addGap(18, 18, 18)
      
      .addComponent(jLabel2)
      
      .addGap(10, 10, 10)
      
      .addComponent(cb_turma, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
      
      .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 208, javax.swing.GroupLayout.PREFERRED_SIZE))
      
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 16, Short.MAX_VALUE)
      
      .addComponent(bt_salvar)
      
      .addGap(39, 39, 39))
      
      );
      

      pack();
      }//

    private void bt_salvarActionPerformed(java.awt.event.ActionEvent evt) {
    
    //Recuperar ID de Turma
    
    String itemTurma = (String) cb_turma.getSelectedItem();
    
    TurmaModel modelTurma = new TurmaModel();
    
    TurmaDAO turmaDao = new TurmaDAO();
    
    modelTurma.setDescricao(itemTurma);
    
    modelTurma = turmaDao.buscarTurma(modelTurma);
    
    //Recuperar ID de Aluno
     String itemAluno = (String) cb_aluno.getSelectedItem();
     AlunoModel modelAluno = new AlunoModel();
     AlunoDAO alunoDao = new AlunoDAO();
     modelAluno.setNome(itemAluno);
     modelAluno = alunoDao.buscarAluno(modelAluno);
    
     ModelTurmaAluno turmaaluno = new ModelTurmaAluno();
     AlunoTurmaDAO daoAlunoTurma = new AlunoTurmaDAO();
    
     modelAluno.setCodigo(modelAluno.getCodigo());
     modelTurma.setCodigo(modelTurma.getCodigo());
     turmaaluno.setAluno(modelAluno);
     turmaaluno.setTurma(modelTurma);
    
     daoAlunoTurma.create(turmaaluno);
    

    }

Meu problema seria na Classe Dao quando eu instacio o ModelTurmaAluno e depois nao consigo adicionar o result set no modelo criado.

17 Respostas

JeanJavaMan

Pelo o que vejo vc colocar um Int em id_aluno_turma

e aqui vc pede para retornar uma String sendo q lá é um int
o certo(ERRADO) seria:

model.setAluno(rs.getInt("id_aluno_turma"));

Obs: acabei de observar que setAluno recebe um AlunoModel, então nunca vai funcionar este Resultset

jeff021

Entao eu fiz primeiro com Int mas ele diz que os dados são incompativeis com os tipos.

Pois acho que o meu Model eu instacio o aluno da classe aluno dai essa parte eu nao sei como fazer.
Acabei de colocar getInt aqui e fica do mesmo jeito

JeanJavaMan

desculpe atualizei a resposta com o erro, eu não tinha visto

jeff021

Jean o que devo fazer então no meu model?

JeanJavaMan

publica aqui essa Classe AlunoModel, assim poderei te ajudar

jeff021

package br.com.jeff.model.bean;

/**
*

  • @author jeff-
    */
    public class ModelTurmaAluno {

    private AlunoModel aluno;
    private TurmaModel turma;

    public AlunoModel getAluno() {
    
    return aluno;
    
    }
    
    public void setAluno(AlunoModel aluno) {
    
    this.aluno = aluno;
    
    }
    
    public TurmaModel getTurma() {
    
    return turma;
    
    }
    
    public void setTurma(TurmaModel turma) {
    
    this.turma = turma;
    
    }
    

}

Esse aqui e meu Bean que eu utilizo para chamar o resultSet

Mas se vc quiser que eu poste os 2 Bean de Aluno e Turma eu posto tbm

JeanJavaMan

Sim, o que eu quero mesmo é a Classe AlunoModel vc me mandou foi a ModelTurmaAluno :slight_smile:

jeff021

package br.com.jeff.model.bean;

/**
*

  • @author jeff-
    */
    public class AlunoModel {

    private int codigo;
    
    private String nome;
    
    private String endereco;
    
    private String telefone;
    
    private String mae;
    
    private String pai;
    
    private String sexo;
    
    private String nascimento;
    
    private String cep;
    
    private String uf;
    
    private String serie;
    
    private String ensino;
    

    public AlunoModel() {
    }

    public AlunoModel(int codigo, String nome) {
    
    this.codigo = codigo;
    
    this.nome = nome;
    
    }
    
    public int getCodigo() {
    
    return codigo;
    
    }
    
    public void setCodigo(int codigo) {
    
    this.codigo = codigo;
    
    }
    
    public String getNome() {
    
    return nome;
    
    }
    
    public void setNome(String nome) {
    
    this.nome = nome;
    
    }
    
    public String getEndereco() {
    
    return endereco;
    
    }
    
    public void setEndereco(String endereco) {
    
    this.endereco = endereco;
    
    }
    
    public String getTelefone() {
    
    return telefone;
    
    }
    
    public void setTelefone(String telefone) {
    
    this.telefone = telefone;
    
    }
    
    public String getMae() {
    
    return mae;
    
    }
    
    public void setMae(String mae) {
    
    this.mae = mae;
    
    }
    
    public String getPai() {
    
    return pai;
    
    }
    
    public void setPai(String pai) {
    
    this.pai = pai;
    
    }
    
    public String getSexo() {
    
    return sexo;
    
    }
    
    public void setSexo(String sexo) {
    
    this.sexo = sexo;
    
    }
    
    public String getNascimento() {
    
    return nascimento;
    
    }
    
    public void setNascimento(String nascimento) {
    
    this.nascimento = nascimento;
    
    }
    
    public String getCep() {
    
    return cep;
    
    }
    
    public void setCep(String cep) {
    
    this.cep = cep;
    
    }
    
    public String getUf() {
    
    return uf;
    
    }
    
    public void setUf(String uf) {
    
    this.uf = uf;
    
    }
    
    public String getSerie() {
    
    return serie;
    
    }
    
    public void setSerie(String serie) {
    
    this.serie = serie;
    
    }
    
    public String getEnsino() {
    
    return ensino;
    
    }
    
    public void setEnsino(String ensino) {
    
    this.ensino = ensino;
    
    }
    
    <a class="mention" href="/u/override">@Override</a>
    
    public String toString() {
    
    return “AlunoModel{” + “codigo=” + codigo + “, nome=” + nome + ‘}’;
    
    }
    
    }
    
JeanJavaMan

Então será assim, pelo visto seu Construtor obriga a passar um nome é um código, então lá no result ficaria assim:

ModelTurmaAluno model = new ModelTurmaAluno();
//seu construtor obriga a passar dessa forma
AlunoModel aluno = new AlunoModel(rs.getInt("id_aluno_turma"),rs.getString("nome do aluno na sua tabela"));
model.setAluno(aluno);

Obs: outra observação, essa sua Model, smp terá um aluno apenas, pela forma q foi colocada no Result, como está dentro do While, smp vai criar uma Instancia nova da ModelTurmaAluno

JeanJavaMan

Se não for adicionar vários alunos, então esse While não é necessario

jeff021

Cara não sei nem como te agradecer kkkkkkkk.
Mas outra coisa que eu queria te perguntar desta forma que eu fiz seria a melhor pratica de fazer esse relacionamento, pois eu tenho muita dificuldade nessa parte.

JeanJavaMan

é só tirar o while:

ModelTurmaAluno model = new ModelTurmaAluno();
model.setAluno(rs.getString("id_aluno_turma"));
JeanJavaMan

Bom, pelo meu ver está tudo separadinho, mas pelo oq vc me publicou está faltando coisa no código para q venha funcionar tudo corretamente kkk

“jeff021:

public List<ModelTurmaAluno> read1()

Como nesse metódo ai, mas acho q vai ainda vai implementar né?
Obs: me perdoe pelas varias observações é q hoje estou cansado para caramba ai estou lento para perceber as coisas, pode deixar o while mesmo já q vc vai retornar uma Lista kk

jeff021

Sim eu estava com bastante dificuldade nessa parte que vc me ajudou. Mas agora eu estou fazendo o resto aqui.
E estou a semanas nessa parte.
O CRUD eu consigo fazer perfeitamente sem dificuldade mas para fazer essa inclusão de aluno na turma eu estou a 3 semanas pois tenho muita dificuldade com List<>

JeanJavaMan

Ah entendo, é realmente no inicio é dificil mesmo, mas depois de um tempo vc pega o macete, vou terminar seu método aqui:

public List<ModelTurmaAluno> read1() {
    Connection con = ConnectionFactory.getConnection();
    PreparedStatement stmt = null;
    ResultSet rs = null;

    List<ModelTurmaAluno> turmaalunos = new ArrayList<>();

    try {
        stmt = con.prepareStatement("select * from aluno_turma order by id_aluno_turma");
        rs = stmt.executeQuery();
        while (rs.next()) {
          
            ModelTurmaAluno model = new ModelTurmaAluno();                
            AlunoModel aluno = new AlunoModel(rs.getInt("id_aluno_turma"),rs.getString("nome do aluno na sua tabela"));
            model.setAluno(aluno);
            turmaalunos.add(model);
        }
            return turmaalunos;
    } catch (SQLException ex) {
        Logger.getLogger(AlunoTurmaDAO.class.getName()).log(Level.SEVERE, null, ex);
    }

    return null;
}
jeff021

Quem sabe faz ao vivo. Ganhou mas um fâ no forum kkkkkkk muito obrigado. Hoje percebo que o GUJ ajuda muita gente e vc faz um papel fundamental aqui. Obrigado amigo

JeanJavaMan

:joy::joy::joy::joy::joy::joy::joy::joy: De nada, precisou estamos aqui, me perdoe eu poderia ter te respondido mais melhor e ter explicado tbm, mas cara cheguei cansado hoje, to lento que so, vou é dormir logo kk, Boa noite, qualquer dúvida e so Perguntar aqui no GUJ :slight_smile:
Obs: sim mais outra kkk é cara, eu to ruim hoje, smp tem q fechar a conexão com o BD antes de usar o return, então seria:

con.close();
return turmaalunos;
Criado 31 de janeiro de 2016
Ultima resposta 31 de jan. de 2016
Respostas 17
Participantes 2