SQLite
 sql >> Database >  >> RDS >> SQLite

Come ripristinare il database Sqlite dopo il backup di Android

Questo è il codice principale di un ripristino DB funzionante (da if (dbfile .. in un try ).

            private static final int BUFFERSZ = 32768;
            private byte[] buffer = new byte[BUFFERSZ];
            ........
            dbfile = new File(currentdbfilename);
            .......
            if (dbfile.delete()) {
                origdeleted = true;
            }

            FileInputStream bkp = new FileInputStream(backupfilename);
            OutputStream restore = new FileOutputStream(currentdbfilename);
            copylength = 0;
            while ((copylength = bkp.read(buffer)) > 0) {
                restore.write(buffer, 0, copylength);
            }
            restore.flush();
            restore.close();
            restoredone = true;
            bkp.close();

Le differenze principali sono che elimino il file DB e utilizzo le scritture anziché i trasferimenti. Successivamente e dopo un ripristino riuscito, utilizzo anche quanto segue per riavviare l'app (potrebbe essere eccessivo ma funziona per me) poiché è possibile ottenere risultati imprevedibili (penso che sia possibile accedere a parti del database originale dalla memoria/dati memorizzati nella cache):-

    Intent i = getBaseContext().getPackageManager()
                                            .getLaunchIntentForPackage( getBaseContext().getPackageName() );


    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    finish();
    startActivity(i);
    System.exit(0);