Hallo zusammen,
ich bin gerade dabei Dateien in eine PostgreSQL Datenbank zu speichern und danach wieder auszulesen und als Datei herzustellen.
Als Feldtyp habe ich in der Datenbank "bytea" genommen und füge die Dateien per JDBC folgendermaßen in die Datenbank ein:
Somit habe ich die Datei im Binärformat in der Datenbank vorliegen.
Was ist nun die schnellste Methode die Datei wieder auf der Festplatte herzustellen?
Im Moment mache ich es so:
Dies dauert bei 700 Dateien mit jeweils ca 20kb ca. eine Minute.
Hat jemand eine schnellere Lösung parat?
Viele Grüße
skizZ
ich bin gerade dabei Dateien in eine PostgreSQL Datenbank zu speichern und danach wieder auszulesen und als Datei herzustellen.
Als Feldtyp habe ich in der Datenbank "bytea" genommen und füge die Dateien per JDBC folgendermaßen in die Datenbank ein:
Java:
FileInputStream fis = new FileInputStream(allFiles[i]);
PreparedStatement ps = c.prepareStatement("INSERT INTO files (name, file) VALUES (?, ?)", Statement.RETURN_GENERATED_KEYS);
ps.setString(1, allFiles[i].getName());
ps.setBinaryStream(2, fis, (int)allFiles[i].length());
ps.executeUpdate();
Somit habe ich die Datei im Binärformat in der Datenbank vorliegen.
Was ist nun die schnellste Methode die Datei wieder auf der Festplatte herzustellen?
Im Moment mache ich es so:
Java:
File f = new File("c:/test/" + rs.getString(2));
try {
f.createNewFile();
} catch (IOException ex) {
Logger.getLogger(Receiver.class.getName()).log(Level.SEVERE, null, ex);
}
int read = 0;
OutputStream out = null;
try {
out = new FileOutputStream(f);
} catch (FileNotFoundException ex) {
Logger.getLogger(Receiver.class.getName()).log(Level.SEVERE, null, ex);
}
InputStream is = rs.getBinaryStream(3); // to download
BufferedInputStream input = new BufferedInputStream(is);
while ((read = input.read()) != -1) {
out.write(read);
}
out.flush();
out.close();
Dies dauert bei 700 Dateien mit jeweils ca 20kb ca. eine Minute.
Hat jemand eine schnellere Lösung parat?
Viele Grüße
skizZ