Problema com popular JTable com relacionamento

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.

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

1 curtida

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

1 curtida

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

1 curtida

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

publica aqui essa Classe AlunoModel, assim poderei te ajudar

1 curtida

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

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

1 curtida

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

    @Override
    public String toString() {
    return “AlunoModel{” + “codigo=” + codigo + “, nome=” + nome + ‘}’;
    }
    }

1 curtida

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

1 curtida

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

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.

1 curtida

é só tirar o while:

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

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[quote=“jeff021, post:1, topic:321122”]
public List<ModelTurmaAluno> read1()
[/quote]
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

1 curtida

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

1 curtida

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;
}
1 curtida

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

1 curtida

: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;
1 curtida