Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / POI / 15 сообщений из 15, страница 1 из 1
13.11.2006, 22:16:11
    #34125359
bruder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
POI
привет всем. Мне надо написать класс который используя Jakarta POI переводит данные из таблицы msSql. Возможности просто обалденные, но если таблица большая(в моем случае 150000 записей) вылетает OutOfMemoryError. Смотрел где то на форумах предлагают увеличить виртуальную память jvm, но в моем случае это не подходит. МОжно как нить решить проблему?
...
Рейтинг: 0 / 0
13.11.2006, 22:28:55
    #34125375
anton_evane
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
POI
Выдели для VM больше памяти или пиши данные пакетным образом
...
Рейтинг: 0 / 0
13.11.2006, 23:08:14
    #34125416
hubamuba
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
POI
bruderпривет всем. Мне надо написать класс который используя Jakarta POI переводит данные из таблицы msSql. Возможности просто обалденные, но если таблица большая(в моем случае 150000 записей) вылетает OutOfMemoryError.

извините, нифига не понял - что куда должно 'переводить' данные?
...
Рейтинг: 0 / 0
13.11.2006, 23:16:47
    #34125421
bruder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
POI
Забыл напечатать - перевести в Excel.

anton_evane пиши данные пакетным образом
Вот об этом пожалуйта поподробнее. Чувствую это неплохое решение
...
Рейтинг: 0 / 0
13.11.2006, 23:56:16
    #34125455
hubamuba
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
POI
bruderЗабыл напечатать - перевести в Excel.

anton_evane пиши данные пакетным образом
Вот об этом пожалуйта поподробнее. Чувствую это неплохое решение

вынуджен огорчить. POI, как впрочем и всякие JExcelApi, не имеет 'stream' режима. т.е. сперва все данные книги (листа) загоняются в память, и только потом есть возможность сохранить данные из памяти на диск. соответственно, либо увеличивать кол-во доступной памяти, либо можешь поискать jdbc-odbc мост для excel'я (если речь идет о windows платформе)
...
Рейтинг: 0 / 0
14.11.2006, 15:25:32
    #34127560
М.Голованов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
POI
Вообще-то если надо очень большую таблицу вывести так, чтобы она читалась MS Excel, можно выдать CSV файл. Его можно писать в поток (в файл или в сокет) построчно.
...
Рейтинг: 0 / 0
14.11.2006, 17:05:38
    #34128029
bruder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
POI
hubamuba спасибо за ответ. Да, это полная лажа, потому что от POI пидется отказатся, а алтернативы пока не знаю. А вот такой вопрос: может можно например создавать отдельные Sheet и записывать их в уже созданную ранее workbook(в которой уже есть другие sheets)? тоже был бы вариант.
...
Рейтинг: 0 / 0
14.11.2006, 17:18:19
    #34128074
hubamuba
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
POI
bruder hubamuba спасибо за ответ. Да, это полная лажа, потому что от POI пидется отказатся, а алтернативы пока не знаю. А вот такой вопрос: может можно например создавать отдельные Sheet и записывать их в уже созданную ранее workbook(в которой уже есть другие sheets)? тоже был бы вариант.

теоретически можно. копай в сторону:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    POIFSFileSystem fs      =
             new  POIFSFileSystem( new  FileInputStream("workbook.xls"));
    HSSFWorkbook wb =  new  HSSFWorkbook(fs);
    HSSFSheet sheet = wb.getSheetAt( 0 );
    ....
    // Write the output to a file
    FileOutputStream fileOut =  new  FileOutputStream("workbook.xls");
    wb.write(fileOut);
    fileOut.close();

только вот вопрос в том, а хватит ли тебе памяти хотя бы для одного листа... зависит от кол-ва столбцов и степени их заполненности данными.

М.ГоловановВообще-то если надо очень большую таблицу вывести так, чтобы она читалась MS Excel, можно выдать CSV файл. Его можно писать в поток (в файл или в сокет) построчно.

безусловно можно. тока придется забыть о форматировании.
чтоб сравнить, достаточно залить csv файл в excel и открыть такой же файл сгенеренный poi или jexcelapi (ессно с форматированием и т.д).
небо и земля :)
...
Рейтинг: 0 / 0
14.11.2006, 17:48:40
    #34128187
bruder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
POI
hubamuba
только вот вопрос в том, а хватит ли тебе памяти хотя бы для одного листа... зависит от кол-ва столбцов и степени их заполненности данными.

действительно не подумал. Хотя я Excel знаю плохо, и не знаю какой тип данных самый большой(надеюсь не как в msSQL - image до 2 гигов), может и можно как нить определить размер листа в процессе конвертации. То что ты посоветовал уже что то, обнадеживает, огромное спасибо :). Пойду Excel учить..
...
Рейтинг: 0 / 0
14.11.2006, 22:12:03
    #34128653
anton_evane
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
POI
Альтернатива Jacob только теряется кроссплатформенность
...
Рейтинг: 0 / 0
15.11.2006, 06:29:49
    #34128905
Alexey Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
POI
bruderпривет всем. Мне надо написать класс который используя Jakarta POI переводит данные из таблицы msSql. Возможности просто обалденные, но если таблица большая(в моем случае 150000 записей) вылетает OutOfMemoryError. Смотрел где то на форумах предлагают увеличить виртуальную память jvm, но в моем случае это не подходит. МОжно как нить решить проблему?

По-моему тут по форуму пробегала ссылка на пропатченый каким-то энтузиастом вариант POI на тему снижения потребления памяти.

Кроме того эксель вроде бы тебе и так не даст на один лист запихать 150000 записей а только что-то в район 65535 записей

поищи по форуму или по инету что-то вроде poi-2.5.1-final-patched.jar
...
Рейтинг: 0 / 0
15.11.2006, 10:04:59
    #34129188
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
POI
Может кто знает как лист обозвать на русском, ибо результат
Код: plaintext
HSSFSheet sheet = wb.createSheet("Лист1");
кракозябы.
Заранее благодарен.
...
Рейтинг: 0 / 0
15.11.2006, 11:14:52
    #34129448
GMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
POI
zalexakaМожет кто знает как лист обозвать на русском, ибо результат
Код: plaintext
HSSFSheet sheet = wb.createSheet("Лист1");
кракозябы.
Заранее благодарен.Вроде это не лечится.
...
Рейтинг: 0 / 0
15.11.2006, 11:18:27
    #34129458
hubamuba
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
POI
zalexakaМожет кто знает как лист обозвать на русском, ибо результат
Код: plaintext
HSSFSheet sheet = wb.createSheet("Лист1");
кракозябы.
Заранее благодарен.

Код: plaintext
1.
    _sheet = _wb.createSheet();
    _wb.setSheetName(_wb.getNumberOfSheets()- 1 , sheetname, HSSFWorkbook.ENCODING_UTF_16);

думаю понятно о чем я...
...
Рейтинг: 0 / 0
15.11.2006, 11:31:00
    #34129514
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
POI
так я и думал спасибочки
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / POI / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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