Jag antar att du använder den officiella MySQL-levererade JDBC-drivrutinen Connector/J.
Du säger uttryckligen till JDBC (och MySQL) att strömma resultaten rad för rad med statement.setFetchSize(Integer.MIN_VALUE);
Från MYSQL Docs :
Alla andra värden än Integer.MIN_VALUE för hämtningsstorleken ignoreras av MySQL, och standardbeteendet gäller. Hela resultatuppsättningen kommer att hämtas av JDBC-drivrutinen.
Använd inte setFetchSize() , så JDBC-drivrutinen kommer att använda standardvärdet (0 ), eller ställ in värdet på 0 uttryckligen. Använder värdet 0 kommer också att säkerställa att JDBC inte använder MySQL-markörer, vilket kan inträffa beroende på din MySQL- och Connector/J-version och konfiguration.