Você não está usando o mesmo
PreparedStatement , o método de fábrica Connection.prepareStatement está retornando uma nova instância cada vez que você a chama. PreparedStatement.executeQuery está fazendo o mesmo com ResultSet . Você está apenas usando as mesmas variáveis. Isso significa que você está vazando recursos - o primeiro
PreparedStatement e ResultSet - toda vez que esse método é chamado, que nunca está sendo fechado. Minha recomendação seria usar o
JdbcTemplate do Spring que irá lidar com esses recursos de banco de dados corretamente para você e você divide seu código em dois métodos.