Banco de dados para TableModel

3 respostas Resolvido
netbeansjavamysql
RDev

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.

3 Respostas

staroski

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.

RDev

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<>();
RDev
Solucao aceita

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

Criado 15 de agosto de 2018
Ultima resposta 15 de ago. de 2018
Respostas 3
Participantes 2