Hi Leute,
ich habe Binärdateien in meiner PostgreSQL-Datenbank (Bilder, Musik). Diese sind als Large Objects gespeichert, d.h. in meiner eigentlichen Tabelle sind nur die Oids und ein der dateiname als primary key.
Wenn ich die Daten jetzt aber über JDBC auslese und die Dateien auf die Festplatte schreiben will, werden die Dateien da zwar angelegt (größe stimmt laut Win Explorer auch) aber ich kann sie nicht öffnen. Wenn ich die Dateien mit einem Texteditor öffne, wird nichts angezeigt. Ich vemute daher, dass nur Speicherplatz reserviert wird, aber nichts aus der db geschrieben wird.
Hier mein Code:
Weiss einer, was ich hier falsch mache?
Danke im Vorraus.
Mfg LuigiEd
ich habe Binärdateien in meiner PostgreSQL-Datenbank (Bilder, Musik). Diese sind als Large Objects gespeichert, d.h. in meiner eigentlichen Tabelle sind nur die Oids und ein der dateiname als primary key.
Wenn ich die Daten jetzt aber über JDBC auslese und die Dateien auf die Festplatte schreiben will, werden die Dateien da zwar angelegt (größe stimmt laut Win Explorer auch) aber ich kann sie nicht öffnen. Wenn ich die Dateien mit einem Texteditor öffne, wird nichts angezeigt. Ich vemute daher, dass nur Speicherplatz reserviert wird, aber nichts aus der db geschrieben wird.
Hier mein Code:
Code:
dbCon.setAutoCommit( false ); //Muss hier wegen Postgresql gemacht werden
// TabellenSpalte falsch benannt; in spalte video ist Bild gespeichert
PreparedStatement ps = dbCon.prepareStatement("SELECT video FROM \"mmTable\" WHERE id = ?");
String fileName_short = fileName.replaceFirst("./attachment/", "");
ps.setString(1, fileName_short);
ResultSet rs = ps.executeQuery();
if(rs.next()){ //Sicherstellen, dass ein Wert zurückgeliefert wird und ZEiger posistionieren
// Open the large object for reading
FileOutputStream fs = new FileOutputStream("./temp/"
+ fileName);
int oid = rs.getInt(1);
LargeObject obj = lobj.open(oid, LargeObjectManager.READ);
// Read the data
byte buf[] = new byte[obj.size()];
//obj.read(buf, 0, obj.size());
fs.write(buf, 0, obj.size());
// Do something with the data read here
System.out.println("Objektgröße: " + String.valueOf(obj.size()));
// Close the object
fs.close();
obj.close();
}
rs.close();
ps.close();
// Finally, commit the transaction.
dbCon.commit();
Weiss einer, was ich hier falsch mache?
Danke im Vorraus.
Mfg LuigiEd