Java Objects in SQL-Datenbank speichern.

takki

Grünschnabel
Hallo zusammen.
Ich muss für ein Projekt Java Objekte in einer Datenbank abspeichern. Dabei handelt es sich um Objekte der Klassen Double, String, Arrays verschiedener Dimensionen dieser beiden Klassen und Map. Ich muss dafür eine Klasse mit den Funktionen "writeObject(String name, Object o)" und "Object loadObject(String name)" schreiben. LoadObject soll dabei natürlich den Typ der Daten beibehalten. Wenn ich also z.B. ein Double mit writeObject speicher, dann soll loadObject auch ein Objekt vom Typ double zurückgeben.
Nun stehe grundsätzlich schonmal vor der Frage wie ich das DB-Schema aufbaue. Momentan hab ich mich dafür entschieden, die Daten einfach in einem Blob zu speichern, egal von welchen Typ sie sind. Meint Ihr das ist der richtige Weg? Oder sollte ich lieber verschiedene Spalten/Tabellen anlegen, je nachdem um was es sich für einen Typ handelt?

Wie erwähnt speicher ich zur Zeit alles in einem Blob. Habe mich im Internet ein wenig umgeschaut und kam dann letztendlich auch auf folgende Implementierungen für meine Funktionen:

Object loadObject(String name)
Code:
...
pstmt = conn.prepareStatement("SELECT data FROM input WHERE name = ?");
pstmt.setString(1, name);
ResultSet rs = pstmt.executeQuery();
rs.next();
Blob b = rs.getBlob(1);
InputStream is = b.getBinaryStream();
ObjectInputStream ois = new ObjectInputStream(is);
return ois.readObject();
...

writeObject(String name, Object o)

Code:
...
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO input(name, data) VALUES (?, ?)");
pstmt.setString(1, name);
pstmt.setObject(2, o);
pstmt.executeUpdate();
pstmt.close();
...
Exception-Handling spare ich mir und Euch hier, hab ich aber natürlich entsprechend gemacht ;)


Diese Lösung funktioniert auch, allerdings nur, wenn die Objekte keine Strings oder Doubles waren! Habe ich einen String in die DB geschrieben und möchte ihn wieder lesen, so wird eine java.io.StreamCorruptedException geworfen. Gleiches bei Doubles.

Kann mir da jemand helfen?

Viele Grüße,
Takki

Edith: Ok, habe für das Problem eine Lösung gefunden. Wenn man die write-Funktion wie auf http://www.javabeginner.com/uncategorized/java-serialization beschrieben implementiert, dann haut alles hin ;)
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück