2013-07-09 6 views
6

Ich versuche eine sqlite-Datei in den Speicher für eine bessere Leistung zu lesen, wenn ich meine Anwendung schließe ich möchte es zurück auf die Festplatte schreiben.Backup und Wiederherstellung sqlite von der Festplatte in den Speicher in Java

Ich verwende den jdbc (3.7.2) -Treiber in Java.

Nach dem docs, sieht mein Code wie

this._conn = DriverManager.getConnection("jdbc:sqlite:"); 
Statement stat = this._conn.createStatement(); 
File dbFile = new File(this._config.GetDataBaseFile()); 
if (dbFile.exists()) { 
    this._logger.AddInfo("File exists."); 
    stat.executeUpdate("restore from " + dbFile.getAbsolutePath()); 
} 

Die Datei (und seine gültige sqlite db) vorhanden ist, this._conn geöffnet ist, aber wenn ich Anweisungen auf es ausführen will, scheint es, dass es ist keine Tabelle noch Daten im Inneren. Es scheint, dass es nichts wiederherstellt.

Irgendwelche Vorschläge, wie man das weiter lösen/debuggen kann?

(übrigens - wenn ich stat.executeUpdate("backup to test.db") auf meiner Verbindung verwenden, Backups es meinen leer: Speicher: db ...)

+0

Die Datei existiert und es ist eine gültige SQLite-Datenbank - enthält sie jedoch Tabellen? – mthmulders

+0

ja tut es. Und auch Daten. – RalphP

+0

@ mjreaper..hat Sie die Lösung für diesen Code gefunden? Kannst du mir helfen, wie ich es wiederherstellen kann? –

Antwort

0

Es sieht aus wie Sie zwei Dinge fehlen: 1) Die Anführungszeichen um die Dateinamen und 2) stat.close. Versuchen Sie Folgendes:

this._conn = DriverManager.getConnection("jdbc:sqlite:"); 
Statement stat = this._conn.createStatement(); 
File dbFile = new File(this._config.GetDataBaseFile()); 
if (dbFile.exists()) { 
    this._logger.AddInfo("File exists."); 
    stat.executeUpdate("restore from '" + dbFile.getAbsolutePath() + "'"); 
    stat.close(); 
} 

Das ist der einzige Weg war, die ich bekommen konnte es mit Xerial SQLite JDBC-Version 3.7.15-M1 zu arbeiten. Ich glaube nicht, dass die Version in diesem Fall eine Rolle spielt.

0

Die Zitate und stat.close() sind nicht wichtig, nach dem Link: `https://bitbucket.org/xerial/sqlite-jdbc/wiki/Usage ', die ich getestet habe. Zitate helfen, wenn der Dateipfad Leerzeichen enthält.

Ich denke es vielleicht aufgrund der JDBC-Treiber. Probieren Sie Xerials JDBC-Treiber für SQLite aus, was gut für mich funktioniert.

Verwandte Themen