JDBC consulta grande

Galera estou tentado executar um sql mas ocorre um estouro de memoria, esta consulta é para realizar um backup do banco, a tabela em questão tem quase 9 milhões de registros, resolve se eu aumentar a memoria do tomcat para 1,5Gb mas o correto seria utilizar no maximo 900mb.
Gostaria da ajuda de vcs para resolver este problema, gostaria de saber se é possivel realizar uma consulta preguiçosa, onde os registros serão carregados para a memoria a medida que eu for usando o ResultSet.

Estou utilizando JDBC pois a performance com ele é muito superior se utilizar ferramentas como Hibernate, é apenas uma rotina de backup, mas estou com este problema.

public ResultSet consultarRes(StringBuilder sql) { try { if (st == null) { st = conn.createStatement(); } st.setFetchSize(10000);//tentativa de uma consulta preguiçosa mas não resolveu ResultSet res = st.executeQuery(sql.toString()); if (res != null) { return res; } return null; } catch (Exception ex) { System.out.println("CONSULTA:" + ex.getMessage()); System.out.println("SQL: " + sql.toString()); Logger.getLogger(DataBaseJDBC.class.getName()).log(Level.SEVERE, null, ex); return null; } }