Все, что я пытаюсь сделать, - это конвертировать мой 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!