El comportamiento predeterminado para MySQL Connector/J es cargar todo el contenido del ResultSet
en la memoria tan pronto como .executeQuery
se llama. Entonces, aunque nuestro ResultSet
es TYPE_FORWARD_ONLY
los desarrolladores de MySQL JDBC aparentemente decidieron ser "amables" y permitirnos usar .first
, .absolute
, etc. en ese caso (porque todo el ResultSet
está en la memoria y fácilmente disponible), aunque la especificación JDBC dice
Tenga en cuenta, sin embargo, que si todo el ResultSet
no se garantiza que esté en la memoria, por ejemplo, si usamos st.setFetchSize(Integer.MIN_VALUE)
para "transmitir" el ResultSet
a medida que nos desplazamos por él, MySQL Connector/J no nos permitirá usar nada más que .next
o lo conseguiremos
com.mysql.jdbc.OperationNotSupportedException: Operation not supported for streaming result sets