Страница 1 из 1

JDBC + ResultSet = OutOfMemory

Добавлено: 25 фев 2006, 14:34
jags
При использовании Firebird + JDBC + клиентская_программа_на_Java есть проблема. Если в результат select попадает очень много записей (больше 1 млн), то клиентская часть вываливается по OutOfMemory, т.к. все результаты выборки заносятся СРАЗУ (!) в ResultSet, а не достаются из БД постепенно по ResultSet.next().
Задача выбрать все записи подряд (простой select * from table).
Вижу 2 решения:
1) выводить кусками по 100 тысяч через select first 100000 skip X ...
недостаток: линейное увеличение времени выборки при увеличении X (пока дойдем до конца базы время выборки увеличивается с 10 сек на 100 тыс до 10 мин на 100 тыс)
2) выводить кусками по 100 тысяч через (id_table>Xmin) and (id_table<Xmax)
недостаток: нужно очень аккуратно следить за id_table, хотя время запроса в этом случае всегда одинаковое
Понимаю, что проблема в JDBC, т.к. оно не может выбирать из БД постепенно. Как ее решать?
Использую Firebird 2.0 + jaybird + JDK1.4.2 + Linux

Добавлено: 25 фев 2006, 14:36
kdv
я скоро начну банить за размещение ОДИНАКОВЫХ вопросов тут и на sql.ru.