Per ottenere il numero di righe del ResultSet potresti puntare all'ultima riga, ed ottenere il numero corrente della riga con getRow(); successivamente tornare all'inizio ed iniziare il ciclo di lettura.
Quell'ArrayList è errato messo in quel modo... crei un ArrayList ogni qual volta ricominci il ciclo.