Если это происходит из-за большого количества данных в наборе результатов, я бы предложил разбить ответ на страницы с помощью «LIMIT s, m» (где s - начало и m - макс. Записи - оба целых числа).Затем обработайте эти данные в цикле с порциями по 1000 записей за раз:
boolean finished = false;
int start = 1;
int max = 1000;
do {
r = s.executeQuery (MY_SELECT_QUERY + " LIMIT " + start + ", " + max);
finished = // if r returned less than M records
while(...) {
processResultSet(r);
}
start += // number of returned records;
} while (!finished);
Конечно, 1000 - это произвольное число, вы можете поиграть и найти оптимальный максимальный размер для вашего запроса.
ОБНОВЛЕНИЕ: Если обработка каждой записи занимает много времени, сохраняйте записи в списке и просматривайте их, когда все данные извлекаются из базы данных.