Vou assumir que você está usando o driver JDBC oficial do MySQL, Connector/J.
Você está dizendo explicitamente ao JDBC (e MySQL) para transmitir os resultados linha por linha com
statement.setFetchSize(Integer.MIN_VALUE); De Documentos MYSQL :
Qualquer valor diferente de
Integer.MIN_VALUE para o tamanho da busca é ignorado pelo MySQL, e o comportamento padrão se aplica. Todo o conjunto de resultados será buscado pelo driver JDBC. Ou não use
setFetchSize() , então o driver JDBC usará o valor padrão (0 ), ou defina o valor como 0 explicitamente. Usando o valor de 0 também garantirá que o JDBC não use cursores MySQL, o que pode ocorrer dependendo das versões e configuração do MySQL e do Connector/J.