Переполнение памяти при работе с ResultSet
От: Аноним  
Дата: 01.08.05 10:40
Оценка:
Привет всем !!!!!

Имеется следующий код программы, которая делает выборку информации из таблицы, содержащей несколько миллионов записей


 
import java.sql.*;

   ...
   Connection targetCon; 
   Statement targetStmt;    
   ResultSet targetRs;    

   ...

   targetCon = DriverManager.getConnection (targetURL,dbfInProperties);
   targetStmt = targetCon.createStatement ();
   targetRs = targetStmt.executeQuery("select * from table1");
   while (targetRs.next()) {  
      //обработка записей
   }
   targetRs.close();
   targetStmt.close();
   targetCon.close();
   ...


При чтении в цикле записей (примерно несколько сот тысяч записей) задача "вылетает" с сообщением об ошибке
о нехватке памяти для приложения. Из этой ситуации удается выйти, если увеличить объем выделяемой памяти под приложение (параметр командной строки -Xmx256m). Однако, это не спасает ситуацию в принципе.
Получается, что все прочитанные записи ResultSet хранит у себя в памяти. Эта ошибка происходит со всеми серверами СУБД, используемые в проекте (MSSQL, Informix, DBF). (использование хранимой процедуры в данной ситуации не приемлемо).

Помогите разрешить эту проблемму !!!!!!!!!!!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.