Problem dotyczy sposobu pobierania danych w getStuff() . Za każdym razem, gdy odwiedzasz getStuff() otrzymujesz nowy ResultSet ale nie zamykasz tego.
To narusza oczekiwania Statement klasa (patrz tutaj - https://docs. oracle.com/javase/7/docs/api/java/sql/Statement.html
):
Domyślnie w tym samym czasie może być otwarty tylko jeden obiekt ResultSet na obiekt Statement. Dlatego też, jeśli odczyt jednego obiektu ResultSet jest przeplatany odczytem innego, każdy musi być wygenerowany przez inny obiekt Statement. Wszystkie metody wykonania w interfejsie Statement domyślnie zamykają bieżący obiekt ResultSet instrukcji, jeśli istnieje otwarty.
Co jeszcze gorzej, to rs z kodu wywołującego. Jest również pochodną statement pole, ale nie jest zamknięte.
Konkluzja:masz kilka ResultSet odnoszące się do tego samego Statement obiekt jednocześnie otwarty.