SQLite
 sql >> Base de données >  >> RDS >> SQLite

Comment restaurer la base de données SQLite après la sauvegarde d'Android

Il s'agit du code principal d'une restauration de base de données fonctionnelle (à partir de if (dbfile .. dans 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();

Les principales différences sont que je supprime le fichier DB et que j'utilise des écritures plutôt que des transferts. Plus tard et après une restauration réussie, j'utilise également ce qui suit pour redémarrer l'application (peut-être exagéré, mais cela fonctionne pour moi) car vous pouvez obtenir des résultats imprévisibles (je pense que des parties de la base de données d'origine peuvent être accessibles à partir de la mémoire/des données mises en cache) :-

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


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