2015-05-04 2 views
1

У меня есть файл, который я получаю как byte[], и я должен сохранить его в своей сущности как Clob.Как сохранить байт [] как java.sql.Clob?

Как сохранить byte[] как java.sql.Clob?

+0

CLOB является _character_ нескладный; поэтому вы не должны сохранять в нем массив байтов. Вместо этого используйте blob. – fge

ответ

0

С Apache commons-io

byte[] data = IOUtils.toByteArray(clob.getAsciiStream()); 

если вам нужна специальная кодировка или у вас есть какой-то вопрос попробовать:

byte[] data = IOUtils.toByteArray(clob.getCharacterStream(), "UTF-8"); 
+0

Этот я нашел. Но я хочу выполнить обратную операцию. Это от байт [] до java.sql.Clob. –

1

Чтобы получить Clob от byte[] на Oracle, вы можете сделать

private Clob createClob(byte[] data, Connection conn) { 
    CLOB clob = null; 

    try { 
     clob = CLOB.createTemporary(conn, false, oracle.sql.CLOB.DURATION_SESSION); 

     clob.open(CLOB.MODE_READWRITE); 

     OutputStream out = (OutputStream) clob.setAsciiStream(0L); 

     out.write(data); 
     out.flush(); 
     out.close(); 
    } 
    catch (Exception e) { 
     logger.error("", e); 
    } 
    finally { 
     try { 
      if (clob != null && clob.isOpen()) clob.close(); 
     } 
     catch (SQLException e) { 
      logger.error("Unable to close CLOB", e); 
     } 
    } 

    return clob; 
} 

Чтобы создать Blob (двоичный), почти то же самое, просто замена CLOB по блобы и OutputStream out = (OutputStream) blob.setBinaryStream(0L);

+0

Ваш код получит исключение NullpointerException по строке 4 –

+0

@SurajitBiswas: Это неправда. Вы должны отметить разницу между моим объектом 'clob' и классом CLOB класса Oracle и его статическим методом' createTemporary'. – Albert

0

javax.sql.rowset.serial.SerialClob может принять массив полукокса и создать сериализации объекта CLOB.

Вы можете сослаться здесь http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/serial/SerialClob.html

javax.sql.rowset.serial.SerialBlob может принять массив байтов

Вы можете сослаться здесь http://docs.oracle.com/javase/7/docs/api/javax/sql/rowset/serial/SerialBlob.html

Смежные вопросы