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?
Cliente com lista
5 Respostas
Coloque o código da sua busca como está agora,fica mais fácil para ajudar!
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?
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.
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;
}
Interessante… .quando for realizar esse tipo de consultar vou dar uma atenção especial para isso, obrigado!