Erro ao preencher tabela (Com TableModel)?

Estou tentando preencher a tabela passando o Select (para fazer a pesquisa no banco de dados) por meio de um getter e setter, para organizar a tabela da forma que o usuário preferir porém eu tento aparece o seguinte erro:

Segue os códigos:

Botão que Carrega a tabela

// Botão Carregar
    private void btnCarregarActionPerformed(java.awt.event.ActionEvent evt) {                                            
        TableTelaPrincipal tabletp = new TableTelaPrincipal();
        TabelaLocacao.setModel(tabletp);
        
        String Select = null;
        
        if(slctTipoequip.getSelectedIndex()== 0){
            Select = ("select l.codlocacao, e.nome, e.codinterno, e.numeroserie, l.statusequip, l.fisio, p.nome,"+ 
                                   " p.nomeresponsavel, l.datainicial, l.valorlocacao"+
                                   " from locacao l"+
                                   " join equipamento e"+
                                   " on l.codequip = e.codequip"+
                                   " join paciente p"+
                                   " on l.codpaciente = p.codpaciente");
        }else{
            Select = ("select l.codlocacao, e.nome, e.codinterno, e.numeroserie, l.statusequip, l.fisio, p.nome,"
                    + " p.nomeresponsavel, l.datainicial, l.valorlocacao"
                    + " from locacao l "
                    + "join equipamento e "
                    + "on l.codequip = e.codequip"
                    + " join paciente p "
                    + "on l.codpaciente = p.codpaciente"
                    + " where e.tipoequip = '"+slctTipoequip.getSelectedItem()+"' ");
        }
        
        beanstp.setSelectTable(Select);
        
        tabletp.clear();
        tabletp.read();
    } 

Classe da tabela:

public class TableTelaPrincipal extends AbstractTableModel{
    
    BeansTelaPrincipal beanstp = new BeansTelaPrincipal();
    ConexaoBD conex = new ConexaoBD();
    private final List<BeansTelaPrincipal> dados = new ArrayList<>();
    private final String[] colunas = {"ID Locação","Equipamento","Código","Num. de Série", "Status",
                                      "Fisioterapeuta", "Paciente", "Responsavel", "Data inicial",
                                      "Valor da Locação"};
    
    @Override
    public String getColumnName(int column) {
        return colunas[column];
    }
    
    @Override
    public int getRowCount() {
        return dados.size();
    }

    @Override
    public int getColumnCount() {
        return colunas.length;
    }
   
    public List<BeansTelaPrincipal> read(){
        
        conex.conectar();
        PreparedStatement stmt = null;             
        ResultSet rs = null;
        
       try {

       stmt = conex.con.prepareStatement(beanstp.getSelectTable()); //Pegando a variavel para fazer a pesquisa
       rs = stmt.executeQuery();

           while (rs.next()){
               BeansTelaPrincipal beans = new BeansTelaPrincipal(); 
               beans.setCodlocacao(rs.getInt("l.codlocacao"));
               beans.setEquipamento(rs.getString("e.nome"));
               beans.setCodigo(rs.getString("e.codinterno"));
               beans.setNumserie(rs.getString("e.numeroserie"));
               beans.setStatus(rs.getString("l.statusequip"));
               beans.setFisio(rs.getString("l.fisio"));
               beans.setPaciente(rs.getString("p.nome"));
               beans.setResponsavel(rs.getString("p.nomeresponsavel"));
               beans.setDatainicial(rs.getString("l.datainicial"));
               beans.setValor(rs.getString("l.valorlocacao"));
               dados.add(beans);
               this.fireTableDataChanged();
           }
       } catch (SQLException ex) {
          JOptionPane.showMessageDialog(null, "Erro ao preencher Tabela.\n Erro:"+ex);
       }
           conex.desconetar();
       return null;
}
    
    public List<BeansTelaPrincipal> clear(){
    dados.clear();
    return null;
    }
       
    @Override
    public Object getValueAt(int linha, int coluna) {
        
        switch (coluna){
            case 0:
                return dados.get(linha).getCodlocacao();
            case 1:
                return dados.get(linha).getEquipamento();
            case 2:
                return dados.get(linha).getCodigo();
            case 3:
                return dados.get(linha).getNumserie();
            case 4:
                return dados.get(linha).getStatus();
            case 5:
                return dados.get(linha).getFisio(); 
            case 6:
                return dados.get(linha).getPaciente();
            case 7:
                return dados.get(linha).getResponsavel();
            case 8:
                return dados.get(linha).getDatainicial();  
            case 9:
                return dados.get(linha).getValor();    
        }
    return null;

    }
    
}

Olá Matheus_Costa,

Ao colocar um breakpoint no momento em que a consulta ao DB será executada, a String de SQL realmente está preenchida?

Tenha certeza de que estre trecho de código “beanstp.getSelectTable()”, relamente retorne sua Query SQL antes de rs = stmt.executeQuery();

1 curtida

Acabei de colocar o breakpoint e variavel stmt não está preenchida, não sei o porque…

Bom, acredito que isso ocorre, pelo motivo simples, de seu algorítimo não está usando a mesma referencia do objeto quando seta a query e quando tenta recuperar no objeto: beanstp.

Tenha certeza de que o objeto em que adiciona a query e recupera a query tenha ou seja a mesma referência;

1 curtida

Consegui cara deixei a variável publica

public static String Select = null;

e puxei ela pro TableModel sem usar o getter e setter

stmt = conex.con.prepareStatement(TelaPrincipal.Select);
1 curtida