Mysql
 sql >> Database >  >> RDS >> Mysql

perché potrei usare il metodo first() quando il mio tipo di set di risultati è solo in avanti?

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