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

I modi migliori per creare backup per l'applicazione offline?

Non c'è bisogno di fare nulla di complesso, piuttosto semplicemente salvare il file SQLiteDatabase.

Fondamentalmente chiudi Room db, quindi salva il file.

per esempio. quello che segue è un esempio molto rudimentale che salva nella directory dei download in una sottodirectory chiamata DBsaves :-

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    resetSequenceAction();
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        verifyStoragePermissions(this);
    }
}

@Override
protected void onStart() {
    super.onStart();
    mTestDB = Room.databaseBuilder(this,TestDatabase.class,TestDatabase.DBNAME).build();
    addSomeData();
    addSomeData();
    addSomeData();
    addSomeData();
    mTestDB.close();
    File dbfile = this.getDatabasePath(TestDatabase.DBNAME);
    File sdir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),"DBsaves");
    String sfpath = sdir.getPath() + File.separator + "DBsave" + String.valueOf(System.currentTimeMillis());
    if (!sdir.exists()) {
        sdir.mkdirs();
    }
    File savefile = new File(sfpath);
    try {
        savefile.createNewFile();
        int buffersize = 8 * 1024;
        byte[] buffer = new byte[buffersize];
        int bytes_read = buffersize;
        OutputStream savedb = new FileOutputStream(sfpath);
        InputStream indb = new FileInputStream(dbfile);
        while ((bytes_read = indb.read(buffer,0,buffersize)) > 0) {
            savedb.write(buffer,0,bytes_read);
        }
        savedb.flush();
        indb.close();
        savedb.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
}


public void verifyStoragePermissions(Activity activity) {

    final int REQUEST_EXTERNAL_STORAGE = 1;
    String[] PERMISSIONS_STORAGE = {

            //Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE
    };

    int permission = ActivityCompat.checkSelfPermission(
            activity,
            Manifest.permission.WRITE_EXTERNAL_STORAGE);

    if(permission != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(
                activity,
                PERMISSIONS_STORAGE,
                REQUEST_EXTERNAL_STORAGE
        );
    }
}
  • Nota i metodi onCreate e VerifyStoragePermissions inclusi solo per ottenere l'autorizzazione a scrivere su una memoria esterna (nota anche le autorizzazioni utente impostate in manifest).

    • L'operazione di importazione è eseguire questa operazione al di fuori di Room (allo stesso modo se dovessi ripristinare da un backup).

Dopo l'esecuzione :-

E poi copiando il file su un PC e aprendolo con SQLite Manager :-

Questo è del tutto come previsto e come mostrato altamente portabile, ovvero puoi rilasciarlo in qualsiasi strumento SQLite (la versione SQLite utilizzata da tale strumento potrebbe essere un fattore restrittivo)