package serializer; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Vector; public class SerializeObjectsToDB { public static void main(String[] args) { try { Class.forName("org.postgresql.Driver"); Connection con = DriverManager.getConnection( "jdbc:postgresql:test", "postgres", "postgres"); // Datenbank von alten Einträgen reinigen con.createStatement().executeUpdate( "DELETE FROM serialized"); // Ein PreparedStatement für das Einfügen der // serialisierten Objekte vorbereiten PreparedStatement statement = con.prepareStatement( "INSERT INTO serialized(id,object) " + "VALUES(?,?)"); // Ein paar Objekte zum Speichern vorbereiten Vector toSave = new Vector(); toSave.add("There's one"); toSave.add(new Integer(2)); toSave.add(new StringBuffer("...")); // Die Objekte erst in den Speicher serialisieren... ByteArrayOutputStream mem = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(mem); out.writeObject(toSave); out.close(); statement.setInt(1, toSave.hashCode()); // ...dann als Byte-Array in das PreparedStatement // packen statement.setBytes(2, mem.toByteArray()); statement.execute(); // Danach werfen wir die Objekte weg... toSave = null; ResultSet result = con.createStatement().executeQuery( "SELECT id,object FROM serialized"); while (result.next()) { System.out.println("ID: " + result.getInt(1)); // ...und holen sie aus der Datenbank wieder raus ObjectInputStream in = new ObjectInputStream( result.getBinaryStream(2)); System.out.println("Object: " + in.readObject()); } // Die Tabelle machen wir wieder sauber con.createStatement().executeUpdate( "DELETE FROM serialized"); } catch (Exception e) { e.printStackTrace(); } } }