Das Standardverhalten von MySQL Connector/J besteht darin, den gesamten Inhalt des ResultSet
zu laden in den Speicher sobald .executeQuery
wird genannt. Obwohl unser ResultSet
ist TYPE_FORWARD_ONLY
die MySQL-JDBC-Entwickler haben sich anscheinend entschieden, "nett" zu sein und uns zu erlauben, .first
zu verwenden , .absolute
, usw. in diesem Fall (weil das gesamte ResultSet
befindet sich im Speicher und ist leicht verfügbar), obwohl die JDBC-Spezifikation sagt
Beachten Sie jedoch, dass wenn das gesamte ResultSet
ist nicht garantiert im Speicher, z. B. wenn wir st.setFetchSize(Integer.MIN_VALUE)
verwenden um das ResultSet
zu "streamen". Während wir es durchscrollen, lässt uns MySQL Connector/J nichts anderes als .next
verwenden oder wir bekommen
com.mysql.jdbc.OperationNotSupportedException: Operation not supported for streaming result sets