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