Anda tidak menggunakan PreparedStatement yang sama , metode pabrik Connection.prepareStatement mengembalikan Anda contoh baru setiap kali Anda menyebutnya. PreparedStatement.executeQuery melakukan hal yang sama dengan ResultSet . Anda hanya menggunakan variabel yang sama.
Ini berarti Anda membocorkan sumber daya - PreparedStatement pertama dan ResultSet - setiap kali metode ini dipanggil, yang tidak pernah ditutup.
Rekomendasi saya adalah menggunakan JdbcTemplate Spring's yang akan menangani sumber daya database ini dengan benar untuk Anda dan Anda memecah kode menjadi dua metode.