Il comportamento predefinito per MySQL Connector/J consiste nel caricare l'intero contenuto del ResultSet
in memoria non appena .executeQuery
è chiamato. Quindi, anche se il nostro ResultSet
è TYPE_FORWARD_ONLY
gli sviluppatori MySQL JDBC apparentemente hanno deciso di essere "carini" e di permetterci di usare .first
, .absolute
, ecc. in tal caso (perché l'intero ResultSet
è in memoria e prontamente disponibile), anche se le specifiche JDBC dicono
Nota, tuttavia, che se l'intero ResultSet
non è garantito che sia in memoria, ad esempio, se utilizziamo st.setFetchSize(Integer.MIN_VALUE)
per eseguire lo "streaming" del ResultSet
mentre lo scorriamo, MySQL Connector/J non ci permetterà di usare nient'altro che .next
o otterremo
com.mysql.jdbc.OperationNotSupportedException: Operation not supported for streaming result sets