sql >> Base de Datos >  >> RDS >> SQLite

Cómo restaurar la base de datos Sqlite después de la copia de seguridad de Android

Este es el código central de una restauración de base de datos en funcionamiento (de if (dbfile .. en 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();

Las principales diferencias son que elimino el archivo DB y uso escrituras en lugar de transferencias. Más tarde y luego de una restauración exitosa, también uso lo siguiente para reiniciar la aplicación (puede ser excesivo, pero funciona para mí), ya que puede obtener resultados impredecibles (creo que se puede acceder a partes de la base de datos original desde la memoria/datos almacenados en caché):-

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


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