Você não está usando o mesmo
PreparedStatement
, o método de fábrica Connection.prepareStatement
está retornando uma nova instância cada vez que você a chama. PreparedStatement.executeQuery
está fazendo o mesmo com ResultSet
. Você está apenas usando as mesmas variáveis. Isso significa que você está vazando recursos - o primeiro
PreparedStatement
e ResultSet
- toda vez que esse método é chamado, que nunca está sendo fechado. Minha recomendação seria usar o
JdbcTemplate
do Spring que irá lidar com esses recursos de banco de dados corretamente para você e você divide seu código em dois métodos.