आप उसी PreparedStatement . का उपयोग नहीं कर रहे हैं , फ़ैक्टरी विधि Connection.prepareStatement हर बार जब आप इसे कॉल करते हैं तो आपको एक नया उदाहरण लौटा रहा है। PreparedStatement.executeQuery ResultSet के साथ भी ऐसा ही कर रहा है . आप बस उन्हीं वेरिएबल्स का उपयोग कर रहे हैं।
इसका मतलब है कि आप संसाधनों को लीक कर रहे हैं - पहला PreparedStatement और ResultSet - हर बार इस विधि को कहा जाता है, जिसे कभी बंद नहीं किया जा रहा है।
मेरा सुझाव है कि स्प्रिंग के JdbcTemplate . का उपयोग करें जो आपके लिए इन डेटाबेस संसाधनों को सही ढंग से संभालेगा और आप अपने कोड को दो तरीकों में विभाजित करेंगे।