Не използвате същия PreparedStatement , фабричният метод Connection.prepareStatement ви връща нов екземпляр всеки път, когато го извикате. PreparedStatement.executeQuery прави същото с ResultSet . Вие просто използвате едни и същи променливи.
Това означава, че изтичате ресурси - първият PreparedStatement и ResultSet - всеки път, когато се извиква този метод, които никога не се затварят.
Моята препоръка би била да използвате JdbcTemplate на Spring който ще обработва тези ресурси на базата данни правилно вместо вас и вие разбивате кода си на два метода.