Bạn không sử dụng cùng một PreparedStatement
, phương thức gốc Connection.prepareStatement
đang trả lại cho bạn một phiên bản mới mỗi khi bạn gọi nó. PreparedStatement.executeQuery
đang làm tương tự với ResultSet
. Bạn chỉ đang sử dụng các biến giống nhau.
Điều này có nghĩa là bạn đang làm rò rỉ tài nguyên - PreparedStatement
đầu tiên và ResultSet
- mỗi khi phương thức này được gọi, phương thức này sẽ không bao giờ được đóng.
Đề xuất của tôi là sử dụng JdbcTemplate
của Spring sẽ xử lý các tài nguyên cơ sở dữ liệu này một cách chính xác cho bạn và bạn chia mã của mình thành hai phương pháp.