Ajuda com metodo listar

Boa tarde gente, precisava de uma ajudinha de vcs. tenho o metodo listar, eu queria listar a classe pai e tbm as classes filhas juntas. Sera que isso e possivel, seria em base desse sql. O Sql ta tudo ok, so o array que eu nao sei como fazer. Obrigado

[code] public List Listar(){
String sql = “SELECT cliente., cpfcliente, rgcliente, NULL AS cnpjcliente, NULL AS inscricaoestadualcliente FROM cliente INNER JOIN clientefisico ON cliente.codcliente = clientefisico.Cliente_codcliente UNION SELECT cliente., NULL AS cpfcliente, NULL AS rgcliente, cnpjcliente, inscricaoestadualcliente FROM cliente INNER JOIN clientejuridico ON cliente.codcliente = clientejuridico.Cliente_codcliente”;//aqui é a query
List listar = new ArrayList();
List listar = new ArrayList();
List listar = new ArrayList();
try{
PreparedStatement ps = con.prepareStatement(sql);//você prepara a query pra ser executada

        ResultSet rs = ps.executeQuery();//executa a query retornando os dados num resultSet
       
        while(rs.next()){//enquanto tiver registro...
            ClienteFisico fisico = new ClienteFisico();
            ClienteJuridico juridico = new ClienteJuridico();
            Cliente cliente = new Cliente();
            cliente.setCodcliente(rs.getInt(1));
            cliente.setNomecliente(rs.getString(2));
            cliente.setLogradourocliente(rs.getString(3));
            cliente.setNumerocliente(rs.getInt(4));
            cliente.setBairrocliente(rs.getString(5));
            cliente.setCidadecliente(rs.getString(6));
            cliente.setUfcliente(rs.getString(7));
            cliente.setCepcliente(rs.getString(8));
            cliente.setEmailcliente(rs.getString(9));
            cliente.setTelefonecliente(rs.getString(10));
            cliente.setComplementocliente(rs.getString(11));
            cliente.setCelularcliente(rs.getString(12));
            fisico.setCpfcliente(rs.getString(13));
            fisico.setRgcliente(rs.getString(14));
            juridico.setCnpjcliente(rs.getString(15));
            juridico.setInscricaoestadualcliente(rs.getString(16));
            listar.add(cliente);//...ele acrescenta na sua lista
            
        }                
       
        return listar;//retorna a lista
       
    }catch(Exception ex){//se der algum erro, ele manda a mensagem com o erro ocorrido
        JOptionPane.showMessageDialog(null, ex.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE);
        return null;
    }
}[/code]

Oi!

Veja se eu entendi direito, você quer que um único list contenha objetos distintos, sendo eles:

  • Classe Pai
  • Classe Filho

É isso?
Só para te deixar claro, se declarar a lista sendo um objeto Pai, ela aceita que seja adicionado todos os objetos filhos, está ciente disso né? :slight_smile:

Abraços.

Estude um pouco sobre herança:

http://www.tiexpert.net/programacao/java/heranca.php

nel e isso mesmo que eu quero, mas estou meio cego, e a cabeca nao pensa mais em nada, como eu faco isso ?

Se as classes ClienteFisico e Cliente juridico estenderem de Cliente basta você utilizar esta declaração:

List<Cliente> listar = new ArrayList<Cliente>(); 

Daí a sua lista aceitara os objetos Cliente, ClienteFisico e ClienteJuridico.

Abs,

Eu ja fiz assim amigao e da erro. ja fiz dessas 2 maneiras abaixo.

[code] cliente.setComplementocliente(rs.getString(11));
cliente.setCelularcliente(rs.getString(12));
((ClienteFisico) cliente).setCpfcliente(rs.getString(13));
((ClienteFisico) cliente).setRgcliente(rs.getString(14));
((ClienteJuridico) cliente).setCnpjcliente(rs.getString(15));
((ClienteJuridico) cliente).setInscricaoestadualcliente(rs.getString(16));

            listar.add(cliente);//...ele acrescenta na sua lista[/code]

E deu erromodelo.Cliente cannot be cast to modelo.ClienteFisico

E tbm fiz dessa maneira

List<Cliente> listar = new ArrayList<Cliente>(); ...... ...... .... Cliente cliente = new Cliente(); cliente.setCodcliente(rs.getInt(1)); cliente.setNomecliente(rs.getString(2)); cliente.setLogradourocliente(rs.getString(3)); cliente.setNumerocliente(rs.getInt(4)); cliente.setBairrocliente(rs.getString(5)); cliente.setCidadecliente(rs.getString(6)); cliente.setUfcliente(rs.getString(7)); cliente.setCepcliente(rs.getString(8)); cliente.setEmailcliente(rs.getString(9)); cliente.setTelefonecliente(rs.getString(10)); cliente.setComplementocliente(rs.getString(11)); cliente.setCelularcliente(rs.getString(12)); fisico.setCpfcliente(rs.getString(13)); fisico.setRgcliente(rs.getString(14)); juridico.setCnpjcliente(rs.getString(15)); juridico.setInscricaoestadualcliente(rs.getString(16)); listar.add(cliente);//...ele acrescenta na sua lista

E nao consigo nada, so erro. Poxa gente por favor tem como colocar o exemplo completo pra mim. Mto obrigado pelas resposta de todos

Oi!

Você não pode fazer um cast de uma classe Pai para uma classe Filho, somente o inverso.
Vou exemplificar, veja se fica mais claro:

[code]public class Pessoa {
private String nome;
// getters and setters;
}

public class PessoaFisica extends Pessoa {
private String cpf;
// getters and setters
}

public class PessoaJuridica extends Pessoa {
private String cnpj;
// getters and setter
}

public List getAllPeople() {
PessoaFisica pf = new PessoaFisica();
// é filho, portanto, tem acesso ao método
pf.setNome(rs.getString(1);
pf.setCpf(rs.getString(2));

  PessoaJuridica pj = new PessoaJuridica();
  // é filho, portanto, tem acesso ao método
  pj.setNome(rs.geString(3));
  pj.setCnpj(rs.getString(4));

  List<Pessoa> result = new ArrayList<Pessoa>();
  result.add(pf);
  result.add(pj);

  return result;

}[/code]

Se eu quiser apenas nome, sem me interessar se é PJ ou PF, basta instanciar somente a classe Pessoa.
Veja, posso instanciar as três classes, gerar objeto e adicionar todas elas na mesma lista sem nenhum problema.
Como a lista é de Pessoa e PessoaFisica e PessoaJuridica são filhas de Pessoa, não gera problema de cast ou algo do tipo.

Perceba, isto também seria válido:

Pessoa p = new PessoaFisica();

Aqui, você não tem acesso aos métodos contidos em PessoaFisica, pois a classe pessoa não possui acesso aos métodos da classe PessoaFisica, por exemplo.

Já o inverso é falso:

PessoaFisica pf = new Pessoa();

Fui claro?

Abraços.

Show de bola nel, obrigado ja me deu uma luz. Obrigado a todos pelas respostas, e sempre mais respostas serao bem vindas.