powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Результат SQL-запроса в ZIP-архив
12 сообщений из 12, страница 1 из 1
Результат SQL-запроса в ZIP-архив
    #39255941
Boro17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Помогите, пожалуйста, примером как запихнуть результат SQL-запроса сразу в ZIP-архив?
Удалось только выгрузить сначала в файл построчно, а затем заархивировать файл. Но хотелось бы именно сразу в архив писать.

Спасибо.
...
Рейтинг: 0 / 0
Результат SQL-запроса в ZIP-архив
    #39255949
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Boro17,

А код показать? Вроде достаточно OutputStream обернуть в GzipOutputStream или ZipOutputStream.
...
Рейтинг: 0 / 0
Результат SQL-запроса в ZIP-архив
    #39255977
Boro17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
   try {     
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ZipOutputStream zos = new ZipOutputStream(baos);
        String sql = "select * from "+cfg_owner+"."+cfg_object;
        try (Statement stmt = connection.createStatement()) {
            ResultSet rs = stmt.executeQuery(sql);
            ResultSetMetaData rsmd = rs.getMetaData();
            int ColumnCount = rsmd.getColumnCount();

            zos.putNextEntry(new ZipEntry(cfg_output_dir+"\\"+cfg_output_file+".zip"));
            while (rs.next()) {
                for (int i = 1; i<=ColumnCount; i++)
                {
                    zos.write(rs.getString(i).getBytes());
                }
            zos.flush();
            zos.closeEntry();
            }            
        }



авторjava.util.zip.ZipException: no current ZIP entry
at java.util.zip.ZipOutputStream.write(ZipOutputStream.java:326)
at java.io.FilterOutputStream.write(FilterOutputStream.java:97)
at exportdata.ExportData.runQuery(ExportData.java:109)
at exportdata.ExportData.main(ExportData.java:56)
...
Рейтинг: 0 / 0
Результат SQL-запроса в ZIP-архив
    #39255982
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У вас в исключении ещё какой-то FilterOuputStream затесался. В коде такого нет.
putNextEntry это создание файла внутри архива. Вы чего-то не то пишете в его имени.
ResultSet тоже надо закрывать
...
Рейтинг: 0 / 0
Результат SQL-запроса в ZIP-архив
    #39255985
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется или zos.closeEntry() прям в цикле?
...
Рейтинг: 0 / 0
Результат SQL-запроса в ZIP-архив
    #39255987
Boro17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Парни, спасибо, разобрался :)
...
Рейтинг: 0 / 0
Результат SQL-запроса в ZIP-архив
    #39256024
Boro17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно ли посчитать размер несжатого файла не извлекая его, как это делает, например, WinRar?
Намекните, пожалуйста.
...
Рейтинг: 0 / 0
Результат SQL-запроса в ZIP-архив
    #39256026
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Boro17,

Код: java
1.
2.
long originalSize = entry.getSize();
long compressedSize = entry.getCompressedSize();

взято отсюда
...
Рейтинг: 0 / 0
Результат SQL-запроса в ZIP-архив
    #39256042
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Технически следует учитывать, что "посчитать размер не извлекая файла" и "посчитать размер не вычитывая поток" - две разные задачи.
Вторая может быть нерешаемой, т.к. deflate может записывать фактические значения в заголовки после данных. Ещё могут быть сжатые данные записанные в несколько смежных кусков - тогда у каждого куска будет свой размер, хотя все они принадлежат одному файлу.
...
Рейтинг: 0 / 0
Результат SQL-запроса в ZIP-архив
    #39256050
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У java.util.zip.ZipFile есть метод size(): количество java.util.zip.ZipEntry.
У java.util.zip.ZipEntry есть метод getSize(): the uncompressed size of the entry data, or -1 if not known

Есть подозрение, что можно посчитать без вычитывания потока.
...
Рейтинг: 0 / 0
Результат SQL-запроса в ZIP-архив
    #39256201
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Листинг содержания zip-архива консольными утилитами работает подозрительно быстро. Возможно он просто skip-ает
содержимое ZipEntries и берет сведения из заголовков.

Код: java
1.
2.
3.
4.
5.
unzip -l -v <namefile>

 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
.........
...
Рейтинг: 0 / 0
Результат SQL-запроса в ZIP-архив
    #39256527
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спецификация zip-архивов доступна где-то со времён pkzip 2.0, а это около четверти века назад.
Там и про central directory было и про заголовки после данных.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Результат SQL-запроса в ZIP-архив
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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