У меня есть файл, который я получаю как byte[]
, и я должен сохранить его в своей сущности как Clob.Как сохранить байт [] как java.sql.Clob?
Как сохранить byte[]
как java.sql.Clob
?
У меня есть файл, который я получаю как byte[]
, и я должен сохранить его в своей сущности как Clob.Как сохранить байт [] как java.sql.Clob?
Как сохранить byte[]
как java.sql.Clob
?
С Apache commons-io
byte[] data = IOUtils.toByteArray(clob.getAsciiStream());
если вам нужна специальная кодировка или у вас есть какой-то вопрос попробовать:
byte[] data = IOUtils.toByteArray(clob.getCharacterStream(), "UTF-8");
Этот я нашел. Но я хочу выполнить обратную операцию. Это от байт [] до java.sql.Clob. –
Чтобы получить 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);
Ваш код получит исключение NullpointerException по строке 4 –
@SurajitBiswas: Это неправда. Вы должны отметить разницу между моим объектом 'clob' и классом CLOB класса Oracle и его статическим методом' createTemporary'. – Albert
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
CLOB является _character_ нескладный; поэтому вы не должны сохранять в нем массив байтов. Вместо этого используйте blob. – fge