У меня есть Java-код, который должен вставить байтовый массив в базу данных Oracle в столбец BLOB-объектов.Сигнатура функции:
void loadBlob(Connection connection, byte[] byteData, PreparedStatement ps) {...}
Массив байтов передается как параметр (нет необходимости читать его из какого-либо источника / потока).
PS был создан с использованием:
connection.prepareStatement("insert into mytable values(?)")
Mytable-скрипт: create table mytable (myblob blob)
Существует множество способов загрузки BLOB-объектов:
- Использование стандартного объекта BLOB-объекта jdbc
Blob blob = connection.createBlob();
blob.setBytes(1, byteData);
ps.setBlob(1, blob);
ps.execute();
blob.free();
Использование специфического объекта оракула
Blob blob = BLOB.createTemporary(connection, false, BLOB.DURATION_SESSION);
blob.setBytes(1, byteData);
ps.setBlob(1, blob);
ps.execute();
blob.free();
Использование функции базы данных oracle hextoraw
PreparedStatement ps2 = connection.prepareStatement("insert into mytable values (hextoraw(?))")
//convert the byte array to hexadecimal digits - the implementation is skipped to avoid de-focus from the main issue
String hexaDigits = convertByteArrayToHexaDigits(byteData);
ps2.setString(1, hexaDigits);
ps2.execute();
Вопрос
Каковы преимущества / недостатки вышеуказанных способов?Есть ли другие лучшие способы?