Nie używasz tego samego PreparedStatement , metoda fabryczna Connection.prepareStatement zwraca Ci nową instancję za każdym razem, gdy ją wywołasz. PreparedStatement.executeQuery robi to samo z ResultSet . Używasz tylko tych samych zmiennych.
Oznacza to wyciek zasobów — pierwszy PreparedStatement i ResultSet - za każdym razem, gdy wywoływana jest ta metoda, które nigdy nie są zamykane.
Moim zaleceniem byłoby użycie Springa JdbcTemplate który prawidłowo obsłuży te zasoby bazy danych i podzielisz kod na dwie metody.