Piccola correzione, prima avevo scritto quel codice abbozzato ma senza ragionarci su più di tanto. Le due condizioni in && vanno scambiate!!
// salta i record iniziali non voluti
for (int i = 0; i < pageOffset && rs.next(); i++) // Se offset 0-based (altrimenti i=1 se 1-based)
;
// prende i record della pagina
for (int i = 0; i < pageSize && rs.next(); i++) {
// estrai il record, mappa nell'oggetto "dto", aggiungi in lista ecc..
}
JDBC posiziona all'inizio il cursore PRIMA del primo record. Quindi se l'offset è 0-based e si chiede 0, allora 0<0 è false e il secondo operando NON lo valuta (non esegue neanche il rs.next() ). E il ciclo termina subito, quindi non sposta nulla del cursore.
Lapsus mio (capita anche a me ... ).