2013-07-09 25 views
6

Sto cercando di leggere un file sqlite in memoria per prestazioni migliori, quando chiudo la mia applicazione voglio scriverlo su hdd.Backup e ripristino sqlite dal disco alla memoria in Java

Sto utilizzando il driver jdbc (3.7.2) in Java.

Secondo la documentazione, il mio codice è simile

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()); 
} 

Il file esiste (ed è un db sqlite valida), this._conn è aperto, ma se voglio eseguire istruzioni su di esso, sembra che ci non c'è tabella né dati all'interno. Sembra che non ripristini nulla.

Qualche suggerimento su come risolvere/correggere ulteriormente?

(a proposito - se uso stat.executeUpdate("backup to test.db") sulla mia connessione, i backup mio vuoto: memoria: db ...)

+0

Il file esiste ed è un database SQLite valido, ma contiene tabelle? – mthmulders

+0

sì, sì. E anche i dati. – RalphP

+0

@ mjreaper..did trovi la soluzione per questo codice? puoi aiutarmi come ripristinare? –

risposta

0

Sembra che si sta perdendo due cose: 1) Le virgolette intorno al nome del file e 2) stat.close. Provare quanto segue:

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(); 
} 

quello era l'unico modo ho potuto farlo funzionare con Xerial SQLite JDBC versione 3.7.15-M1. Non penso che la versione contenga molto in questo caso.

0

Le citazioni e stat.close() non sono importanti, in base al collegamento: "https://bitbucket.org/xerial/sqlite-jdbc/wiki/Usage", che ho testato. Le offerte aiutano quando il percorso del file contiene spazi, però.

Penso che sia dovuto al driver jdbc. Prova il driver JDBC di Xerial per SQLite, che funziona perfettamente per me.

Problemi correlati