Una Statement l'oggetto può avere un solo ResultSet attivo , quindi quando esegui rs2 = stmt.executeQuery(sql) , il primo ResultSet (rs ) viene chiuso.
Crea due Statement oggetti, uno per rs e un altro per rs2 .
Citando il javadoc di Statement
: