powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Память и Вектор
19 сообщений из 19, страница 1 из 1
Память и Вектор
    #32689558
akula84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос такой.
Например мы делаем выборку из БД длинной 100 000 строк. При этом результат помещаем в вектор. При этом выскакивает сообщение OutOfMemory.

Как это можно избежать?

Я так понимаю, что этого можно избежать делая выборку в несколько этапов.

Но как это можно реализовать или есть другие способы.

Заранее спасибо за ответы
...
Рейтинг: 0 / 0
Память и Вектор
    #32689618
Фотография рубль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДЛя какой цели формируете вектор с данными?
...
Рейтинг: 0 / 0
Память и Вектор
    #32689626
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да ещё ТАКОГО размера???
...
Рейтинг: 0 / 0
Память и Вектор
    #32689636
akula84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В таблицу данные положить
...
Рейтинг: 0 / 0
Память и Вектор
    #32689646
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
порциями данные вытаскивай и порциями клади
...
Рейтинг: 0 / 0
Память и Вектор
    #32689648
Фотография рубль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akula84 делаем выборку из БД длинной 100 000 строк. При этом результат помещаем в вектор.
akula84 В таблицу данные положить
И для чего такие маневры. Поясните смысл вами задуманного.
...
Рейтинг: 0 / 0
Память и Вектор
    #32689654
akula84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как это при помощи JDBC сделать
просто where использовать или как еще можно ?
...
Рейтинг: 0 / 0
Память и Вектор
    #32689658
akula84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и по сколько данных рекомендуется вытаскивать за раз?
...
Рейтинг: 0 / 0
Память и Вектор
    #32689663
akula84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
смысл такой: есть документы с различными статусами. Хочется сразу показать документы с одним статусом, а их там 100 000.

Конечно можно сделать фильтр по клиенту и дате...

То есть отображать такие большие выборки не рекомендуется?
...
Рейтинг: 0 / 0
Память и Вектор
    #32689670
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akula84То есть отображать такие большие выборки не рекомендуется?
вредно для здоровья JVM
...
Рейтинг: 0 / 0
Память и Вектор
    #32689678
akula84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а какое максимальное количество выборки? с точностью до 1000
...
Рейтинг: 0 / 0
Память и Вектор
    #32689686
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akula84а какое максимальное количество выборки? с точностью до 1000
точно никакого рецепта нет (много от чего зависит) екскрементируйте :)
...
Рейтинг: 0 / 0
Память и Вектор
    #32689713
Фотография рубль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
INSERT INTO <name_table>
SELECT * FROM <name_table>;

Вы можете использовать команду INSERT чтобы получать или выбирать значения из одной таблицы и помещать их в другую, чтобы использовать их вместе с запросом. Чтобы сделать это, вы просто заменяете предложение VALUES на соответствующий запрос.
...
Рейтинг: 0 / 0
Память и Вектор
    #32689778
Фотография рубль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akula84смысл такой: есть документы с различными статусами. Хочется сразу показать документы с одним статусом, а их там 100 000.

Конечно можно сделать фильтр по клиенту и дате...

То есть отображать такие большие выборки не рекомендуется?
Можно но во первых нет необходимости перекачивать все это в вектор, а работать с результатом запроса, это раз.
Во вторых и это еще не единственный вариант.
Вам уже объясняли о использовании модели данных для построетия таблиц просмотра. Можно обращаться с запросом к базе за каждой строкой или брать порциями. В модели для JTable опишите AbstractTableModel в этом классе организуйте стек, размером раза в два превышающий вывод на экран.
Стек пополняйте запросами к базе в зависимости от обращения к public Object getValueAt. Результат - нет необходимости у клиента держать весь курсор, следовательно возможен просмотр данных любого объема.

P.S.
akula84 В таблицу данные положить
Таблицы бывают на экрате и в базе. Задовайте вопросы по точнее.
...
Рейтинг: 0 / 0
Память и Вектор
    #32690287
слава зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
java -Xmx1024M yourprogramclassname

при этом не забудьте естессно поставить в комп 1.5 Гб Рама


2. используйте java.util.ArrayList()
заместо java.util.Vector()
если только 2 пользователя в одно и тоже время не будут делать эту операцию



zy
...
Рейтинг: 0 / 0
Память и Вектор
    #32691401
akula84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
рубльВам уже объясняли о использовании модели данных для построетия таблиц просмотра. Можно обращаться с запросом к базе за каждой строкой или брать порциями. В модели для JTable опишите AbstractTableModel в этом классе организуйте стек, размером раза в два превышающий вывод на экран.
Стек пополняйте запросами к базе в зависимости от обращения к public Object getValueAt. Результат - нет необходимости у клиента держать весь курсор, следовательно возможен просмотр данных любого объема.


А если будет так, то получается, что данные будут изменяться, если только клиент будет выбирать мышкой запись, а если он хочет просто пойти по полям полосой прокрутки?
...
Рейтинг: 0 / 0
Память и Вектор
    #32692349
MBasil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ResultSet решение не окончательное. Есть такая штука RowSet :

http://java.sun.com/developer/technicalArticles/javaserverpages/cachedrowset/

Есть и реализация Oracle можете найти на OTN

Вообще решение таких задач, это нетривиальный вопрос.

В качестве альтернативы можно использовать EJB.

Я лично пытаюсь написать свою собственную реализацию RowSet.
...
Рейтинг: 0 / 0
Память и Вектор
    #32692963
Фотография рубль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akula84А если будет так, то получается, что данные будут изменяться, если только клиент будет выбирать мышкой запись, а если он хочет просто пойти по полям полосой прокрутки?
Код: plaintext
1.
2.
3.
4.
  //количество трок 
  public int getRowCount(){
    return <кол_строк>;
  }
При инициализации AbstractTableModel запросите количество записей в просматриваемой таблице и возвращайте его JTable методом getRowCount.
JTable обращается к методу getValueAt только тогда когда значение нужно вывести на экран. Если буфере, созданным вами, значение отсутствует обращайтесь к базе с запросом -> помещайте занные в очередь, вытесняя имеющиеся.
Смысл в том, чтобы у клиента был всегда фиксированный буфер данных, пополняемый в зависимости от запросов JTable к методам AbstractTableModel. При скролинге полосой прокрутки вызываются теже методы что и при движении курсором по строкам JTable, в конечном итоге. Дело только в том, что вернет getRowCount, от этого и будет "движок" скролинга зависеть. В данном случае должно возвращаться реальное кол. записей в таблице базы данных, а не буфера описанного в AbstractTableModel.
...
Рейтинг: 0 / 0
Память и Вектор
    #32700976
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Существует очень малый круг задач для который нужно ОДНОВРЕМЕННО
использовать большое количество оперативной памяти. Если ты решил
публиковать 100 000 строк то незачем их буферизировать в
памяти целиком. Кроме того производственные
задачи имеют тенденцию распухать в размерах и тот код что вчера работал
более или менее успешно завтра уже может не уложится в ОП.
Используй возможности твоей БД. Перенеси большую часть логики на SQL
запрос. Создай глобальный курсор для твоего запроса и выводи данные
порциями. Такой подход работает всегда и везде.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Память и Вектор
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]