O comportamento padrão do MySQL Connector/J é carregar todo o conteúdo do
ResultSet
na memória assim que .executeQuery
é chamado. Portanto, mesmo que nosso ResultSet
é TYPE_FORWARD_ONLY
os desenvolvedores do MySQL JDBC aparentemente decidiram ser "legais" e nos permitir usar .first
, .absolute
, etc. nesse caso (porque todo o ResultSet
está na memória e prontamente disponível), embora a especificação JDBC diga Observe, no entanto, que se todo o
ResultSet
não é garantido que esteja na memória, por exemplo, se usarmos st.setFetchSize(Integer.MIN_VALUE)
para "transmitir" o ResultSet
à medida que rolamos por ele, o MySQL Connector/J não nos permitirá usar nada além de .next
ou vamos conseguir com.mysql.jdbc.OperationNotSupportedException: Operation not supported for streaming result sets