O problema está na maneira como você busca dados em
getStuff()
. Cada vez que você visita getStuff()
você obtém um novo ResultSet
mas você não fecha. Isso viola a expectativa da
Statement
class (veja aqui - http://docs. oracle.com/javase/7/docs/api/java/sql/Statement.html
):
Por padrão, apenas um objeto ResultSet por objeto Statement pode ser aberto ao mesmo tempo. Portanto, se a leitura de um objeto ResultSet for intercalada com a leitura de outro, cada um deve ter sido gerado por diferentes objetos Statement. Todos os métodos de execução na interface Statement fecham implicitamente o objeto ResultSet atual de uma instrução se houver um aberto.
O que torna as coisas ainda piores é o
rs
do código de chamada. Também é derivado da statement
campo, mas não está fechado. Conclusão:você tem vários
ResultSet
pertencente à mesma Statement
objeto aberto simultaneamente.