powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / ява+oracle+clob
4 сообщений из 4, страница 1 из 1
ява+oracle+clob
    #39093560
EDUARD_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не пойму, какой параметр выставить в сессии...

В общем - отдаю CLOB, зипую ява-хранимой процедурой ( http://www.sql.ru/forum/293918/java-szhat-blob).
Потом делаю декомпрессию - а кириллические символы не отображаются нормально...

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
    public static CLOB decompress(BLOB blob) throws Exception {
        CLOB slob = CLOB.createTemporary(db, false, CLOB.DURATION_SESSION);
        GZIPInputStream zin = new GZIPInputStream(blob.getBinaryStream());
        OutputStream out = slob.getAsciiOutputStream();

        try{
            byte[] buffer=new byte[blob.getBufferSize()];

            int cnt;
            while ((cnt=zin.read(buffer)) > 0) {
            out.write(buffer,0,cnt);
            }
        } finally {
            zin.close();
            out.flush();
            out.close();
        }
        return slob;
    }
    public static BLOB compress(CLOB slob) throws Exception {
        BLOB blob = BLOB.createTemporary(db, false, BLOB.DURATION_CALL);
        InputStream in = slob.getAsciiStream();
        GZIPOutputStream zout = new GZIPOutputStream(blob.setBinaryStream(0L)) {
            {
                def.setLevel(Deflater.BEST_COMPRESSION);
            }
        };

        try {
            byte[] buffer = new byte[slob.getBufferSize()];

            int cnt;
            while ((cnt = in.read(buffer)) > 0) {
                zout.write(buffer, 0, cnt);
            }
        } finally {
            in.close();
            zout.finish();
            zout.flush();
            zout.close();
        }
        
        return  blob;
    }
...
Рейтинг: 0 / 0
ява+oracle+clob
    #39093580
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
getAsciiOutputStream и getAsciiStream подразумевают что у вас в данных 1 символ на 1 байт. Скорее всего JDBC драйвер и корячит при этом. Можете попробовать убрать компрессию и просто сохранить данные как есть, чтобы увидеть что они сломаны уже при чтении.
Я бы попробовал из CLOB брать Reader и Writer а в бинарный Stream их заворачивать с помощью Apache Commons IO
https://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/input/ReaderInputStream.html
https://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/output/WriterOutputStream.html
...
Рейтинг: 0 / 0
ява+oracle+clob
    #39093634
EDUARD_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

спасибо, так и думал, но искал нативный путь решения.
проще тогда в оракле в clob конвертить.
...
Рейтинг: 0 / 0
ява+oracle+clob
    #39093662
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD_2, попробуй так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
  public static BLOB compress(CLOB slob)
    throws Exception {

    BLOB blob = BLOB.createTemporary(db, false, BLOB.DURATION_SESSION);

    GZIPOutputStream zipOut = new GZIPOutputStream(blob.setBinaryStream(0L)) {
      {
        def.setLevel(Deflater.BEST_COMPRESSION);
      }
    };

    Reader reader = slob.characterStreamValue();
    Writer writer = new OutputStreamWriter(zipOut);

    char[] chars = new char[slob.getChunkSize()];
    int iChar;
    while ((iChar = reader.read(chars)) != -1) {
      writer.write(chars, 0, iChar);
    }
    writer.close();
    reader.close();

    return blob;
  }
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / ява+oracle+clob
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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