Domyślnym zachowaniem MySQL Connector/J jest załadowanie całej zawartości ResultSet
do pamięci, gdy tylko .executeQuery
jest nazywany. Tak więc, mimo że nasz ResultSet
to TYPE_FORWARD_ONLY
programiści MySQL JDBC najwyraźniej postanowili być "mili" i pozwolić nam na użycie .first
, .absolute
, itp. w tym przypadku (ponieważ cały ResultSet
jest w pamięci i łatwo dostępny), mimo że specyfikacja JDBC mówi
Pamiętaj jednak, że jeśli cały ResultSet
nie ma gwarancji, że będzie w pamięci, np. jeśli użyjemy st.setFetchSize(Integer.MIN_VALUE)
do "przesyłania strumieniowego" ResultSet
gdy je przewijamy, MySQL Connector/J nie pozwoli nam używać niczego poza .next
albo dostaniemy
com.mysql.jdbc.OperationNotSupportedException: Operation not supported for streaming result sets