Bom dia galera,
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’)
Na aplicação:
private String sqlLocalizSalaPorTurnoDia = "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 = ? and turno = ?)";
public List<SalaDTO> listarSalaPorTunoDia(String nomeDia, String turno, String codUsuario)
{
List<SalaDTO> salas = new ArrayList<>();
try {
pstm = conexaoDAO.conectar().prepareStatement(sqlLocalizSalaPorTurnoDia);
pstm.setString(1, nomeDia);
pstm.setString(2, turno);
rs = pstm.executeQuery();
SalaDTO salaDTO;
while (rs.next()) {
salaDTO = new SalaDTO();
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 (Exception e) {
e.printStackTrace();
}
return salas;
}
Coloca a query que é gerado no console, quando é executado a consulta
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()) {
SalaDTO salaDTO = new SalaDTO();// dentro do loop gerando uma nova referência.
// restante do código