Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum könnte ich die Methode first () verwenden, wenn mein Ergebnissatztyp nur vorwärts ist?

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