Запись в новый BLOB-объект на Java - PullRequest
0 голосов
/ 16 июня 2011

Я хочу иметь возможность создать новый объект Blob и затем написать в него.Первоначально мой общий план для этого был следующим:

Создание нового большого двоичного объекта (ноль, потому что нет конструктора Blob) Создайте новый OutputStream и установите для него значение blob.setBinaryStream (0) Записать в выходной поток.

Однако я получаю исключение NullPointerException при попытке выполнить этот код.Есть ли другой способ, которым я должен идти об этом?Любая помощь будет оценена.

Спасибо!

~ B

Ответы [ 3 ]

3 голосов
/ 16 июня 2011

java.sql.Blob - это интерфейс, а не класс, поэтому конструктор не может существовать.Но вы можете создать экземпляр класса реализации SerialBlob, который позволяет вам создавать BLOB-объекты из байтового массива.

2 голосов
/ 16 июня 2011

Создание нового большого двоичного объекта (ноль, потому что нет конструктора Blob). Создайте новый OutputStream и установите для него blob.setBinaryStream (0) Запись в выходной поток.

Однако при попытке выполнить этот код я получаю исключение NullPointerException.

Да, это не удивительно - вы получите NullPointerException при попытке вызвать метод для переменной null (как и ваша blob переменная).

Вместо этого вы должны вызвать setBinaryStream для вашего PreparedStatement объекта. Предположим, что у вас есть данные в byte[], тогда вы можете сделать что-то вроде этого:

byte[] data = ...;

PreparedStatement ps = connection.prepareStatement(...);

ByteArrayInputStream stream = new ByteArrayInputStream(data);

ps.setBinaryStream(1, stream);

ps.executeUpdate();
1 голос
/ 16 июня 2011

Если вы хотите использовать Blob в CallableStatement или PreparedStatement, вам на самом деле не нужно создавать сам объект Blob.Методы setBlob входят в разновидности, которые принимают InputStream вместо объекта Blob.Например, вы можете записать в ByteArrayOutputStream, получить байтовый массив, а затем обернуть его в ByteArrayInputStream.Или вы можете использовать потоковые каналы.

...