Как преобразовать BLOB-объект из БД в список <Object>в Java - PullRequest
0 голосов
/ 12 ноября 2018

Все, что я пытаюсь сделать, - это конвертировать мой Java-список в BLOB и наоборот. Я успешно выполнил первую часть, где я преобразовал свой список и сохранил его как BLOB в БД. Тем не менее, я должен получить BLOB, но не могу преобразовать его обратно в список. Я пробовал искать во многих местах, но не смог найти способ решить эту проблему, с которой я столкнулся. Надеюсь, я найду решение здесь.

Преобразование списка и его сохранение в формате BLOB в БД:

List<CustomerDTO> customersList = new ArrayList<CustomerDTO>();
.
.
some code to store the data in to List<CustomerDTO>
.
.

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(customersList);
byte[] bytes = baos.toByteArray();

// set parameters  
    pstmt.setBinaryStream(1, new ByteArrayInputStream(bytes));
    pstmt.executeUpdate();

Неудачные попытки преобразования BLOB в список:

1)

Blob blob = rs.getBlob("CUSTOMERS_LIST");   
byte[] bdata = blob.getBytes(1, (int) blob.length());
ByteArrayInputStream bais = new ByteArrayInputStream(bdata);
ObjectInputStream ois = new ObjectInputStream(bais);

List<CustomerDTO> list = (ArrayList<CustomerDTO>) ois.readObject();

Эта попытка дала мне пустой список

2)

Stream<T> stream = (Stream<T>) rs.getBinaryStream("CUSTOMERS_LIST");
List<CustomerDTO> list = (List<CustomerDTO>) stream.collect(Collectors.toList());

Эта попытка вызвала у меня ошибку java.lang.ClassCastException: java.io.ByteArrayInputStream cannot be cast to java.util.stream.Stream

3)

IntStream bais = (IntStream) rs.getBinaryStream("CUSTOMERS_LIST");
Stream<Integer> stream = (Stream<Integer>) bais.boxed().collect(Collectors.toList());
List<Integer> ll = (List<Integer>)stream.collect(Collectors.toList());

Я здесь потерян, так как не понимаю, как конвертировать List<Integer> в List<CustomerDTO>

Ждем вашей помощи .. TIA!

1 Ответ

0 голосов
/ 12 ноября 2018

Я немного изменил вашу первую попытку следующим образом:

Blob blob = rs.getBlob("CUSTOMERS_LIST");   
byte[] bdata = blob.getBytes(1, (int) blob.length());
ArrayList<Object> arraylist = new ArrayList<>();
for(byte b : bdata) {
    arraylist.add(new Byte(b));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...