У меня возникла проблема с возвратом должным образом определенного объекта моего собственного класса «BallotPaper» из базы данных. Он сохраняет правильно, но во время создания ObjectInputStream генерируется исключение.Java, JDBC: StreamCorruptedException при попытке получить объект из базы данных
Конечно, я прочитал много подобных вопросов и ответов здесь, но до сих пор не могу с этим справиться.
В базе данных у меня есть таблица со столбцом типа bytea (это postgreSQL), где я сохраняю свой объект.
Вот несколько строк кода:
//Saving the object 'paper' of the class 'BallotPaper'
PreparedStatement st = connection.prepareStatement(query);
ByteArrayOutputStream byos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(byos);
oos.writeObject(paper);
byte[] bytePaper = byos.toByteArray();
st.setBytes(1, bytePaper);
st.executeUpdate();
byos.close();
oos.close();
st.close();
//Trying to retrieve the object:
String query2 = "SELECT paper FROM voters WHERE id="+_id+";";
Statement s = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet r = s.executeQuery(query2);
r.first();
bytePaper = r.getBytes(1);
ByteArrayInputStream b = new ByteArrayInputStream(bytePaper);
ObjectInputStream o = new ObjectInputStream(b); // *
BallotPaper ba = (BallotPaper)o.readObject();
Исключение выбрасывается на линии до последней, отмеченные *.
Похоже, что:
java.io.StreamCorruptedException: invalid stream header: BB656430
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at slave.VotersDB.saveFilledPaper(VotersDB.java:162)
at slave.ClientThread.prepareResponse(ClientThread.java:50)
at slave.ClientThread.run(ClientThread.java:72)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Спасибо за все ответы.
К сожалению, это не работает с flush(). После сохранения я закрываю все потоки. – brzeszczot