Estou desenvolvendo uma consulta a uma base de dados, minha Query quando executada no Banco de Dados funciona perfeitamente ou até mesmo na aplicação quando não uso o PreparedStatement para setar os valores, contudo quando uso ele, a consulta não retorna todos os valores.
Alguém sabe me explicar o pq disto está ocorrendo?
Query:
select * from sala as s
where not exists
(select * from horario as h
where periodo_letivo = ‘2020.1’ and s.cod_sala = h.cod_sala and nome_dia = ‘SEGUNDA’ and turno = ‘VESPERTINO’)
privateStringsqlLocalizSalaPorTurnoDia="select * from sala as swhere not exists (select * from horario as h where periodo_letivo = '2020.1' and s.cod_sala = h.cod_sala and nome_dia = ? and turno = ?)";publicList<SalaDTO>listarSalaPorTunoDia(StringnomeDia,Stringturno,StringcodUsuario){List<SalaDTO>salas=newArrayList<>();try{pstm=conexaoDAO.conectar().prepareStatement(sqlLocalizSalaPorTurnoDia);pstm.setString(1,nomeDia);pstm.setString(2,turno);rs=pstm.executeQuery();SalaDTOsalaDTO;while(rs.next()){salaDTO=newSalaDTO();salaDTO.setCodSala(rs.getString("cod_sala"));salaDTO.setNomeSala(rs.getString("nome_sala"));salaDTO.setCapacidade(rs.getString("capacidade"));salaDTO.setTamanho(rs.getString("tamanho"));salaDTO.setLocalizacao(rs.getString("localizacao"));salaDTO.setTipoSala(rs.getString("tipo_sala"));salaDTO.setModulo(rs.getString("modulo"));salas.add(salaDTO);}}catch(Exceptione){e.printStackTrace();}returnsalas;}
danrox.sa
Alguém?
M
matheusYudi
Coloca a query que é gerado no console, quando é executado a consulta
PedreiroDeSoftware
Então pode retornar algum resultado, já que a negação de todos não são é: algum é.
salaDTO é uma referência.
Semelhante ao ponteiro, quando ele aponta para new SalaDTO, a referência muda para o último objeto consultado.
Como usa a mesma referência para todos os resultados, no final vai referenciar apenas o último objeto.
O correto seria:
while(rs.next()){SalaDTOsalaDTO=newSalaDTO();// dentro do loop gerando uma nova referência.//restantedocódigo