Chcę zapisać obiekty będące instancjami java.util.HashSet do jednej kolumny i później je odczytać.
To co znalazłem w Inernecie z http://blog.tremend.ro/2007/02/15/untitledserializable-java-objects-in-mysql/
opiera się na zapisie wartości do bazy danych:
Edit: znalazłem problem, dlaczego poniższy kod nie działał prawidłowo. Z kodu wziętego z podanej strony pominąłem zamknięcie strumienia out przed transformacją obiektu do postaci tablicy bajtów. Pogrubionym krojem wskazane są skrawki kodu, które pominąłem. Teraz wszystko śmiga tak jak powinno :D
ByteArrayOutputStream baos;
ObjectOutputStream out;
baos = new ByteArrayOutputStream();
try {
out = new ObjectOutputStream(baos);
out.writeObject(hashSetObject);
out.close();
byte [] hashSetObjectAsBytes = baos.toByteArray();
stmt.setBytes(2, hashSetObjectAsBytes);
stmt.executeUpdate();
}
i ich ponownym odczytaniu:
result.next();
ByteArrayInputStream bais;
ObjectInputStream in;
bais = new ByteArrayInputStream(result.getBytes(columnIndex));
in = new ObjectInputStream(bais);
Set<SpecificObject> set = (HashSet<RevisionLabel>) in.readObject();
Przy wykonywaniu programu, gdzie wartości najpierw są dodawane do bazy mysql a później odczytywane, dostaję jednak błąd:
Caused by: java.io.StreamCorruptedException: invalid stream header: 73720011
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:783)
at java.io.ObjectInputStream.(ObjectInputStream.java:280)
dla lini in = new ObjectInputStream(bais);
Czy ktoś z Was wie jaka jest tego przyczyna?
Dodam, że kolumna w bazie danych mysql, w której zapisywane są obiekty jest typu longblob, a klasa obiektów, które zawiera HashSet nie implementuje interfejsu Serializable. a klasa bazowa klasy obiektów, które zawiera HashSet implementuje interfejs Serializable
Nie bójcie się zaproponować zupełnie innego rozwiązania :)