Estou com duvida em como fazer um list de relação.
Segue abaixo um pequeno código com tabelas não relacional, como eu faria com tabelas relacionais?
Tenho 2 classes para relação a Cliente e Endereço
Estou tentando listar na minha (tabela consulta) o endereço também mas só que dar erro , quando eu pego o valor do endereço pq eu não listei a class Endereço .
Como eu faria para fazer essa relação.
public List getLista (String nome)
String sql = “select * from cliente where nome like ?”; /sei que aqui deveria estar chamando com tabela relacional/ se souberem tmb.
Então no seu select você juntaria essas tabelas com um join (poderia adicionar o filtro where também):
SELECT c.codigo, c.nome, e.rua FROM cliente c inner join endereco e on(e.codigo_cliente = c.codigo)
Com isso você implementaria seu código JDBC em que:
1- Primeiro você cria um objeto Cliente
2- Configura os valores das propriedades desse cliente
3- Cria um objeto Endereco
4- Configura os valores das propriedades desse endereço
5- Associa o endereço ao cliente (cliente.setEndereco(endereco))
6- Adiciona seu objeto Cliente em um List
7- Retorna o seu List
Não entendi muito bem sua dúvida, era isso mesmo?
[ ]'s
fabiocortolan
Uma dica, sempre poste seu código entre as tags “" e "” (sem aspas), facilita a visualização.
Outra coisa, no select q o Ev3rton passou d exemplo, se o endereço não for obrigatório, use LEFT OUTER JOIN no lugar de INNER JOIN, dessa forma o retorno do select será para todos os clientes que possuem ou não endereço.
J
junio103
Sim a metade foi.
Agora como faço para colocar numa lista uma relação List. sei que não e assim . mas seria tipo isso a relação que eu queria para min pegar
os dados do endereço tmb.para min mostrar na lista de consulta de uma tabela, pq so mostra os dados do cliente nao mostra do endereço.
( c1.setEndereco(rs.getString(“endereco”)); Errooo!! c1.setEndereco.Cidade()(rs.getString(“cidade”)); = não funciona essa parte pq não chamo a classe Endereço , que conte os sets e gets,pq não sei chamar no list a relação. c1.setEndereco.Uf(rs.getString(“uf”));
fabiocortolan
Vc tem um objeto Endereco dentro de Cliente certo?
Crie uma instância de endereço, preencha com os dados do banco e sete a instância no objeto cliente, ex:
// Depois q já pegou os dados do endereço no bancoEnderecoe=newEndereco()e.setLogradouro(rs.getString('logradouro');e.setNumero(rs.getString('numero');// ... restante dos campos// Insira o objeto Endereco no objeto Clientec.setEndereco(e);// Para recuperar os dados do endereço é só fazerc.getEndereco.getLogradouro();c.getEndereco.getNumero();
J
junio103
Muito obrigado por estar tentando me ajuda.
ate ai tudo bem.
Mas quando chega na minha lista da erro.
public List getLista (String nome) throws SQLException {
Stringsql="select * from cliente where nome like ?";List<Cliente>minhaLista;try(PreparedStatementstmt=this.conexao.prepareStatement(sql)){stmt.setString(1,nome);try(ResultSetrs=stmt.executeQuery()){minhaLista=newArrayList<Cliente>();while(rs.next()){Clientec1=newCliente();c1.setCodcliente(Integer.valueOf(rs.getString("codcliente")));c1.setNome(rs.getString("nome"));c1.setTelefone(rs.getString("telefone"));c1.setCpf(rs.getString("cpf"));c1.setEmail(rs.getString("email"));c1.setDatanascimento(rs.getString("datanascimento"));minhaLista.add(c1);Enderecoc2=newEndereco();c2.setEndereco(rs.getString("endereco"));c2.setCidade(rs.getString("cidade"));c2.setUf(rs.getString("uf"));minhaLista.add(c2);(AQui))Oqueeufaçoparaameumétodominhalistaleroc1ec2
Ev3rton
Olá,
A variável minhaLista é do tipo List, então você só pode adicionar objetos do tipo Cliente nela.
Para você associar o endereço ao cliente, sugiro que crie um atributo do tipo Endereco na sua classe Cliente, então você teria algo assim:
Depois para obter o endereço, você usaria algo como:
minhaListaDeClientes.get(0).getEndereco();
[ ]'s
J
junio103
Eu tentei desse seu jeito mas não da certo de jeito nenhum.
pq tinha que vim com (conexao) do banco.
tinha que ter um while para para esta retornando toda hora no banco.
Minha classe Cliente tem sim Atributo Endereço . para estar puxando de outra tabela.
um problema tmb que deu , não estava setando os valores de cliente com (meuCliente).
Muito obrigado por estar me ajudando.
Se alguém também ter mas exemplos por favor post.
fabiocortolan
Não consigo entender onde está sua dificuldade, vamos tentar esclarecer mais alguns detalhes p/ ver se entendo melhor, seu cliente pode ter mais de um endereço? Você vai trazer os dados do endereço na mesma consulta SQL do cliente? Você já conseguiu pegar os dados do cliente e do endereço do banco?
J
junio103
A minha dificuldade e que não estou conseguindo puxar os valores da tabela endereço relacional para mostrar na minha consulta,e meu cliente só pode ter 1 endereço.a relação e 1 endereço para muitos clientes.
Você vai trazer os dados do endereço na mesma consulta SQL do cliente?sim,pq no cliente já tem o atributo endereço para já fazer isso.
Você já conseguiu pegar os dados do cliente e do endereço do banco? os dados da tabela cliente esta tudo perfeito com cliente consigo pegar e mostrar na consulta.
não estou conseguindo fazer o mesmo com endereço.
Esta faltando esta parte para min finalizar.
Muito obrigado por esta me ajudando.
fabiocortolan
Se estou entendendo direito seu problema está sendo na instrução de select no banco de dados, o Ev3rton já postou um exemplo de SELECT q pode resolver esse seu problema. Se não conseguiu implementar o exemplo dele, passa a estrutura da tabela Cliente e da tabela Endereço (se possível só chave primária e estrangeira) e o comando select q vc está utilizando.
J
junio103
Fabio eu voltei ao seu exemplo e deu certo aqui , esta sem nenhum erro mas quando eu vou mostrar o select esta dando problema.
public List getLista (String nome) throws SQLException {
String sql = "select * from cliente INNER JOIN Endereco ON cliente.idEndereco = Endereco.idEndereco WHERE Endereco.idendereço like ? "; tentei ja assim = problema =Unknown column ‘Endereco.idendereço’ in ‘where clause’.
String sql = "select * from cliente,Endereco INNER JOIN Endereco ON cliente.idEndereco = Endereco.idEndereco WHERE Endereco.idendereço like ? "; tentei assim = problema =
Not unique table/alias: ‘Endereco’
Stringsql="select * from cliente INNER JOIN Endereco ON cliente.idEndereco = Endereco.idEndereco WHERE Endereco.idendereço like ? ";tenteijaassim=problema=Unknowncolumn'Endereco.idendereço'in'whereclause'.
Você colocou idendereço na cláusula WHERE, o “ç” está errado, o correto é idendereco.
Outra coisa, poste os códigos entre as tags “ e ” para facilitar a visualização.
J
junio103
Agora sim fiz tudo certo.
Mas na hora de listar o endereço ,cidade e uf não mostra na Jtable.
publicList<Cliente>getLista(Stringnome)throwsSQLException{Stringsql="select * from cliente INNER JOIN Endereco ON cliente.idEndereco = Endereco.idEndereco WHERE Endereco.idendereco like ? ";List<Cliente>minhaLista;try(PreparedStatementstmt=this.conexao.prepareStatement(sql)){stmt.setString(1,nome);try(ResultSetrs=stmt.executeQuery()){minhaLista=newArrayList<Cliente>();while(rs.next()){Clientec1=newCliente();Enderecoe=newEndereco();c1.setCodcliente(Integer.valueOf(rs.getString("codcliente")));c1.setNome(rs.getString("nome"));c1.setTelefone(rs.getString("telefone"));c1.setCpf(rs.getString("cpf"));c1.setEmail(rs.getString("email"));c1.setDatanascimento(rs.getString("datanascimento"));c1.setObservacao(rs.getString("observacao"));e.setEndereco(rs.getString("endereco"));e.setCidade(rs.getString("cidade"));e.setUf(rs.getString("uf"));c1.setEndereco(e);minhaLista.add(c1);}rs.close();stmt.close();returnminhaLista;}}}
Como vc está pegando o endereço p/ preencher na tabela? Tem q pegar a referência do cliente ex:
// Cliente .Endereço .Nome da CidademinhaLista.get(i).getEndereco().getCidade();
J
junio103
Tentei colocar a referencia de todo jeito no meu método mostrar lista mas não consegui.
Como faço para referenciar aqui no meu método?primeira vez que tento fazer isso.
fabiocortolan
Posta o código onde vc tenta inserir os dados do endereço na tabela.