[RESOLVIDO] JTable retorna um único registro de forma repetida

Olá, boa noite

Sou iniciante em Java e estou tendo dificuldades com Jtable. Por orientação estou utilizando a Default model. O botão deveria chamar o método TESTE e listar todos os registros que estão no banco, mas está trazendo apenas um registro (e de forma repetida) já verifiquei o código com orientações que encontrei em fóruns mas não estou conseguindo encontrar o erro.

Conseguem me ajudar por favor?

MODEL:
public class Recebimento {
    
    private static int numero_recebimento;
    private static float valor_recebimento;
    private static String data_recebimento;
    private static String meio_recebimento;
    private static int presenca_recebimento;
    private static String pac_recebimento;
    private static String prof_recebimento;
    private static int ID_recpaciente;
    private static int ID_recprofissional;
    private static int ID_recebimento;
    
    public static int getNumero_recebimento(){
        return numero_recebimento;
    }
    public void setNumero_recebimento(int numero_recebimento){
        this.numero_recebimento = numero_recebimento;
    }  
    public static float getValor_recebimento(){
        return valor_recebimento;
    }    
    public void setValor_recebimento(float valor_recebimento){
        this.valor_recebimento = valor_recebimento;       
    }    
    public static String getData_recebimento(){
        return data_recebimento;
    }    
    public void setData_recebimento(String data_recebimento){
        this.data_recebimento = data_recebimento;
    }        
     public static String getMeio_recebimento(){
        return meio_recebimento;
    }    
    public void setMeio_recebimento(String meio_recebimento){
        this.meio_recebimento = meio_recebimento;
    }     
    public static int getPresenca_recebimento(){
        return presenca_recebimento;
    }  
    public void setPresenca_recebimento(int presenca_recebimento){
        this.presenca_recebimento = presenca_recebimento;
    }     
    public String getPac_recebimento(){
        return pac_recebimento;
    }   
    public void setPac_recebimento(String pac_recebimento){
        this.pac_recebimento = pac_recebimento;
    }   
    public String getProf_recebimento(){
        return prof_recebimento;
    }  
    public void setProf_recebimento(String prof_recebimento){
        this.prof_recebimento = prof_recebimento;
    } 
     public static int getID_recpaciente() {
        return ID_recpaciente;
    }
    public void setID_recpaciente(int ID_recpaciente) {
        this.ID_recpaciente = ID_recpaciente;
    }
     public static int getID_recprofissional() {
        return ID_recprofissional;
    }
    public void setID_recprofissional(int ID_recprofissional) {
        this.ID_recprofissional = ID_recprofissional;
    }
     public static int getID_recebimento() {
        return ID_recebimento;
    }
    public void setID_recebimento(int ID_recebimento) {
        this.ID_recebimento = ID_recebimento;
    }
   @Override
    public String toString(){
        return "numero " + this.numero_recebimento +
               "valor " + this. valor_recebimento +
               "data " + this. data_recebimento+
               "meio " + this. meio_recebimento+
               "pres " + this.presenca_recebimento+
               "IDPAC " +this.ID_recpaciente+ 
               "IDPROF " +this.ID_recprofissional +
               "IDREC " +this.ID_recebimento;
    }  }

RECEBIMENTO.DAO - MÉTODO DE LISTAR

public class RecebimentoDAO {
    private Connection conn;
    private PreparedStatement prep = null;
    private Statement sta;
    private ResultSet result;
    private List<Recebimento> listarec = new ArrayList<>();
    private List<Recebimento> novafinal = new ArrayList<Recebimento>();
    private List<Recebimento> listateste = new ArrayList();

   public RecebimentoDAO(){ //metodo pra conexão
     conn = new Conexao().getConexao(); //recebe a classe conexão e dentro dela tem o metodo get conexao, chama o método e faz por la
 }
     public List<Recebimento> TESTE(){
        
        try{
        String sql = "SELECT * FROM TabRecebimento";             
        sta = conn.createStatement();
        result = sta.executeQuery(sql);
        
        while(result.next()){
            Recebimento rec = new Recebimento();
            
                rec.setID_recebimento(result.getInt("trID"));
                rec.setNumero_recebimento(result.getInt("trNum")); //(nome da coluna do banco)
                rec.setValor_recebimento(result.getFloat("trValor"));
                rec.setData_recebimento((result.getString("trData")));
                rec.setMeio_recebimento(result.getString("trMeio"));
                rec.setPresenca_recebimento(result.getInt("trPresenca"));
                rec.setID_recpaciente(result.getInt("trtpaID"));
                rec.setID_recprofissional(result.getInt("trtprID"));

            listateste.add(rec);
                               
        } return listateste;
        }catch (SQLException ex){
                
            throw new RuntimeException ("Erro - Listar todos os recebimentos"+ex);
    } }}

VIEW:
public class Relatorio extends javax.swing.JInternalFrame {

    RecebimentoDAO recDAO = new RecebimentoDAO();
    Recebimento recmodel = new Recebimento();
    
public void listar(){
    List<Recebimento> listateste = recDAO.TESTE();
    
    //tabela é obj que recebe todos os dados que vão para a tabela
    DefaultTableModel modelo = (DefaultTableModel) relat_tabela.getModel(); //converte para default
    modelo.getRowCount(); //garantir que terá 0 linhas
       
    //cria objeto que vai percorrer a lista e para cada linha que encontrar vai criar um objeto
    for(Recebimento rec: listateste){//percorre lista e armazena no objeto
        
            modelo.addRow(new Object[]{ //valores que vem no BD carregados dentro do obj
            rec.getID_recebimento(),
            rec.getNumero_recebimento(),
            rec.getValor_recebimento(),
            rec.getData_recebimento(),
            rec.getMeio_recebimento(),
            rec.getPresenca_recebimento(),
            rec.getID_recpaciente(),
            rec.getID_recprofissional(),
            });      
    }
}

REGISTROS BD x JTABLE

Todos os teus atributos de Recebimento são static. Dessa forma não estás a criar instâncias diferentes com atributos diferentes mas sempre a alterar o atributo static da class. Retira todos esses static de Recebimento.

2 curtidas

Muito obrigada! Era isso mesmo

Tenho algumas dúvidas em relação a quando utilizar o static ou não

O static identifica propriedades da class e não de um objeto dessa class. Podem (devem) ser referenciados pelo nome da class e não por uma instância.

class Test {
     static int a = 1;
     int b = 0;
}

Podes fazer, em qualquer lado

 int x = Test.a;   // x vai receber valor 1

Porém, b só existe no contexto de uma instancia da class.

 Test t = new Test();
 t.b = 2;
 Test outroT = new Test();
 outroT.b = 4;
 Test.b = 5; // erro de compilação

Tens duas instancias de Test, uma com b igual a 2 outra com b igual a 4. No entanto, continuas a ter apenas um único a com valor 1 em qualquer dos casos:

 Test.a
 t.a  // embora possível, deve ser evitado aceder a variáveis statis a partir de uma instância
 outroT.a // Mesmo que anterior

E se, fizeres, como estavas a fazer no teu caso, algo como t.a = 2 então todos os três casos anteriores passam a devolver 2 em vez de 1 uma vez que estás a mudar o valor da variavel static.