Banco de dados para TableModel

Boa noite galera,
estou implementando um Table usando AbstractTableModel, até então tudo ok. Ele está abrindo normal.

No entanto não estou conseguindo pegar os dados da tabela do banco de dados e adicionar no TABLE.
Minha Classe clienteDao*

public ArrayList buscarClientes(){

  String sql = "select * from cliente";
  Statement stm = null;
  ResultSet rs = null;
  cliente c = new cliente();
  try {
  stm = con.createStatement();
                rs = stm.executeQuery(sql);
                
                while (rs.next())
                {
                    
                    c.setIdCliente(rs.getInt("idCliente"));
                    c.setNome(rs.getString("nome"));
                    c.setSobrenome(rs.getString("sobrenome"));
                    c.setCnpjCpf(rs.getString("cnpjCpf"));
                    c.setnInsEst(rs.getString("nInsEst"));
                    c.setnFazenda(rs.getString("nFazenda"));
                    c.setEndereco(rs.getString("endereco"));
                    c.setTelefone(rs.getString("telefone"));
                    
                    
                    listClient.add(c);
                }

                con.close();
                                 
                
            } catch (Exception e) {
}
  
      return listClient;
    
}
` private ArrayList<cliente> listClient;

Minha classe que Herda o AbstractTableModel:

public class tmCliente extends AbstractTableModel{

private ArrayList<cliente> listCliente;
private String[] colunas = {"Nome","Sobrenome","CNPJ/CPF","Insc Estadual","Fazenda","Endereço","Telefone"};

@Override
public String getColumnName(int column) {
    return colunas[column]; //To change body of generated methods, choose Tools | Templates.
}

public tmCliente() {
    listCliente = new ArrayList<>();
}

public void addCliente(ArrayList c){
    this.listCliente.addAll(c);
    fireTableDataChanged();
}

public cliente getCliente(int rowIndex){
    return listCliente.get(rowIndex);
}

@Override
public int getRowCount() {
    return listCliente.size();
}


@Override
public int getColumnCount() {
  return colunas.length;
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
    
    switch (columnIndex){
        case 0:
            return listCliente.get(rowIndex).getNome();
            
        case 1:
            return listCliente.get(rowIndex).getSobrenome();
            
        case 2:
            return listCliente.get(rowIndex).getCnpjCpf();
            
        case 3:
            return listCliente.get(rowIndex).getnInsEst();
            
        case 4:
            return listCliente.get(rowIndex).getnFazenda();
            
        case 5:
            return listCliente.get(rowIndex).getEndereco();
            
        case 6:
            return listCliente.get(rowIndex).getTelefone();

        default:
            return null;
            
    }
    
}

}

Este Código eu executo na inicialização do meu JDialog que está com minha Table.

clienteDao c = new clienteDao();

ArrayList ar = c.buscarClientes();
tmClient.addCliente(ar)

Uma parte do ERRO:
Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at java.util.ArrayList.addAll(ArrayList.java:581)
at model.tmCliente.addCliente(tmCliente.java:31)
at pag.test.jdSearcCliente.consultar(jdSearcCliente.java:115)
at pag.test.jdSearcCliente.(jdSearcCliente.java:27)

Se puderem me ajudar com este erro agradeço.

Muda esse método para ser assim:

public void addCliente(ArrayList c){
    listCliente = c;
    fireTableDataChanged();
}

Eu também renomearia o método para setClientes e trocaria o tipo de dado ArrayList para List.

1 curtida

ok Staroski. Fiz o que me pediu, parou o erro de NullPointerException, porém só carrega o ultimo item da tabela várias vezes.

Ficou assim:

public class tmCliente extends AbstractTableModel{

private List<cliente> listCliente;
private String[] colunas = {"Nome","Sobrenome","CNPJ/CPF","Insc Estadual","Fazenda","Endereço","Telefone"};

@Override
public String getColumnName(int column) {
    return colunas[column]; //To change body of generated methods, choose Tools | Templates.
}

public tmCliente() {
    listCliente = new ArrayList<>();
}

public void setClientes(List c){

    listCliente = c;
    fireTableDataChanged();
}

Código de inicialização no JDialog da Table:
clienteDao c = new clienteDao();

List<cliente> ar =  c.buscarClientes();
      
tmClient.setClientes(ar);

E minha classe que busca do Banco:
public List buscarClientes(){

  String sql = "select * from cliente";
  
  Statement stm = null;
  ResultSet rs = null;
  cliente c = new cliente();
  try {
  stm = con.createStatement();
                rs = stm.executeQuery(sql);
                
                while (rs.next())
                {
                    
                    //c.setIdCliente(rs.getInt("idCliente"));
                    c.setNome(rs.getString("nome"));
                    c.setSobrenome(rs.getString("sobrenome"));
                    c.setCnpjCpf(rs.getString("cnpjCpf"));
                    c.setnInsEst(rs.getString("nInsEst"));
                    c.setnFazenda(rs.getString("nFazenda"));
                    c.setEndereco(rs.getString("endereco"));
                    c.setTelefone(rs.getString("telefone"));
                    

                    //System.out.println("\n"+c.getNome());
                    
                    listClient.add(c);
                }

                //conn.commit();
                con.close();
                                 
                
            } catch (Exception e) {
}
  
  return listClient;

}

private List<cliente> listClient = new ArrayList<>();

Resolvido.

O erro estava no método de buscar do Banco, o meu objeto estava sendo instanciado uma vez.
Dai ficou assim:

    try {
  stm = con.createStatement();
                rs = stm.executeQuery(sql);
                
                while (rs.next())
                {
                    cliente c = new cliente();
                    c.setIdCliente(rs.getInt("idCliente"));

...........

Muito obrigado Staroski