# Java Objekt in Datenbank schreiben :(



## maze (12. Sep 2008)

Hallo, habe nun das nächste Problem.

Ich hab eine Java klasse geschrieben die allerlei Informationen binhaltet und möchte nun Objekte von dieser Klasse in meine JavaDB Datenbank schreiben, allerdings ohne Mapping. Es soll nur das Object darin gespeichert werden, mehr passiert mit dem Objekt dann nicht. Jetzt hab ich schon das ganze forum durchsucht aber nichts was ich probiert hab funktioniert.

Habe es einmal als PreparedStatement versucht mit der "setObject()" funktion. Das haut nicht hin. Welchen Datentyp muss die Spalte haben damit es hiermit funktioniert?

Wollte es mit Blob versuchen aber das geht auch nicht.


```
//				ByteArrayOutputStream bos = new ByteArrayOutputStream();
//				ObjectOutputStream oos = new ObjectOutputStream(bos);
//				oos.writeObject(constant); 
//				byte[] b = bos.toByteArray();
//				oos.close();
```

constant ist hier mein objekt das gespeichert werden soll.

dann wollte ich mit PreparedStatement.setBlob() es in die Datenbank speichern...geht aber auch nicht.

Es kann doch nicht so schwer sein ein objekt zu speichern und wieder auszulesen oder?

was mache ich falsch?


gruß maze

edit: ok die setObject funktion von dem PreparedStatement geht nun, allerdings nur mit elementaren Datentypen wie String etc.
Bei einem Object meiner klasse bekomm ich eine SQLDataException.


----------



## musiKk (12. Sep 2008)

Laut Dokumentation weist eine SQLDataException darauf hin, dass z. B. irgendwelche Typen nicht stimmen. Welchen Typ hat die Spalte denn, in die das Objekt soll?


----------



## maze (12. Sep 2008)

Hatte da noch "CLOB" drinstehen, habs jetzt mal auf "BLOB" geändert und es scheint zu funktionieren.


----------



## musiKk (12. Sep 2008)

CLOBs (C für Character) nur bei Textdaten. Sobald es binär wird BLOBs (B für Binary).


----------



## maze (12. Sep 2008)

hmm jetzt hab ich das object zwar in der db drinnen, aber ich bekomme es nicht mehr herausgelesen 


```
byte[] bytearr = null;
ObjectInputStream ois = null;
InputStream is = null;
bytearr = (byte[]) results.getObject(1);
is  = new ByteArrayInputStream(bytearr);
				ois = new ObjectInputStream(is);
				Object object = ois.readObject();
```

bekomme dann nur diese exception

java.lang.ClassCastException: org.apache.derby.impl.jdbc.EmbedBlob incompatible with [B

ich versteh grad gar nix mehr


----------



## musiKk (12. Sep 2008)

Naja, wenn du einen CLOB schreibst, dann solltest du ihn vielleicht auch wieder mit getClob() holen. Das Clob-Objekt hat dann Methoden für den OutputStream.

Der Fehler heißt einfach, dass du etwas vom Typ EmbedBlob (warum auch immer das auf einmal ein BLOB ist) zum Typ [B (was etwas missraten für byte[] ist) casten willst, was fehlschlägt.


----------



## maze (12. Sep 2008)

ALso das mit dem CLOB am anfang war ja ein fehler, es sollte ja ein BLOB sein.


----------



## HoaX (12. Sep 2008)

getObject liefert dir kein byte[] sondern idR ein "Blob", in deinem fall ein EmbedBlob, steht doch alles da.


----------



## maze (12. Sep 2008)

Es geht nun endlich, problem war jetzt am ende das ich erst autoCommit ausschalten musste damit der Blob korrekt gelesen wird.

Danke für eure hilfe


----------

