Cliente com lista

5 respostas
H

Pessoal, tenho um model cliente e esse cliente possui por exemplo uma lista de telefone, quando eu faço na consulta DAO seria “errado” eu utilizar um Statement dentro de um Result? para receber essa lista? para retornar o model com todas as informações?

5 Respostas

filipi

Coloque o código da sua busca como está agora,fica mais fácil para ajudar!

H

ainda nao fiz… vou fazer isso os proximos dias… gostaria de saber se ficaria uma “gambiarra” ou se é considerado ok!

como seria…

Faria um “SELECT * FROM cliente”

e dentro do rs.next

Faria… “SELECT * FROM telefone where id_cliente = rs.getInt”

consegui me fazer compreender rs?

filipi

Entendi sim, dê uma olhada nesse código para ver se te ajuda

public List<Estoque> buscaEstoque(String produto)throws SQLException{
                List<Estoque> busca = new ArrayList<>();
                String select = "select * from estoque where produto = ?";
                PreparedStatement state = getConnection().prepareStatement(select);
                state.setString(1,produto);
                ResultSet rset = state.executeQuery();

Nesse caso estou usando um PreparedStatement ele vai ser o responsável por executar o comando da minha busca.

fabiocortolan

himorrivel:
ainda nao fiz… vou fazer isso os proximos dias… gostaria de saber se ficaria uma “gambiarra” ou se é considerado ok!

como seria…

Faria um “SELECT * FROM cliente”

e dentro do rs.next

Faria… “SELECT * FROM telefone where id_cliente = rs.getInt”

consegui me fazer compreender rs?


Por que vc não usa um JOIN para fazer a busca? Eu acho q seria o mais correto, porém vc terá q usar algo para evitar duplicação de dados do cliente, algo como HashMap.
Segue um exemplo do q eu geralmente faço nesse tipo de situação:

public Cliente getClienteCompleto(long idCliente) throws SQLException {
  // Variáveis para conexão e resultados
  Connection con = null;
  PreparedStatement ps = null;
  ResultSet rs = null;

  Cliente cliente = null;
  
  // Map para evitar duplicidade do cliente
  Map<String, Cliente> mapCliente = new HashMap<>();
  String chaveCli = ""; // chave do map
	  
  String sql = " SELECT [dados q quero do cliente] FROM cliente c " +
		"	INNER JOIN endereco e ON c.idCliente = e.fkCliente ";
		// Restante do código SQL
	  
  try {
    con = ConnectionFactory.getConnection();
  
    ps = con.prepareStatement(sql);
    rs = ps.executeQuery();
		  
    while (rs.next()) {
      // Insere as chaves para evitar repetição de dados
      chaveCli = "C-" + rs.getLong("idCliente");
	  
      // Se o cliente não existir insere os dados ao novo cliente
      if (!mapCliente.containsKey(chaveCli)) {
	cliente = new Cliente();
	// ...insere os dados (set) do cliente
  
	List<Endereco> listaEnd = new ArrayList<>();
	Endereco end = new Endereco();
	// ...insere os dados do 1o. endereço
			  
	// Insere o endereço na lista
	listaEnd.add(end);
			  
	// Insere a lista no cliente
	cliente.setListaEndereco(listaEnd);
      } else {
	// Se o cliente já existe, recebe o cliente existente para inserir os novos endereços
	cliente = mapCliente.get(chaveCli);

	end = new Endereco();
	// ...insere os dados dos próximos endereços
			  
	// Adiciona o novo endereço a lista de endereços do cliente
	cliente.getListaEndereco().add(end);

	// Atualiza a chave do cliente
	mapCliente.put(chaveCli, cliente);
      }
    }	
  } finally {
    con.close();
  }		
  
  return cliente;
}
H

Interessante… .quando for realizar esse tipo de consultar vou dar uma atenção especial para isso, obrigado!

Criado 14 de julho de 2013
Ultima resposta 15 de jul. de 2013
Respostas 5
Participantes 3