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

Meilleures façons de créer des sauvegardes pour une application hors ligne ?

Il est très peu nécessaire de faire quoi que ce soit de complexe, enregistrez plutôt simplement le fichier SQLiteDatabase.

En gros, fermez Room db puis enregistrez le fichier.

par exemple. ce qui suit est un exemple très rudimentaire qui enregistre dans le répertoire des téléchargements dans un sous-répertoire appelé 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
        );
    }
}
  • Notez que les méthodes onCreate et verifyStoragePermissions sont uniquement incluses pour obtenir l'autorisation d'écrire sur le stockage externe (notez que les autorisations utilisateur sont également définies dans le manifeste).

    • L'importation consiste à le faire en dehors de Room (de même si vous deviez restaurer à partir d'une sauvegarde).

Après avoir couru :-

Et ensuite copier le fichier sur un PC et l'ouvrir avec SQLite Manager :-

Ceci étant entièrement comme prévu et comme indiqué, hautement portable, c'est-à-dire que vous pouvez le déposer dans n'importe quel outil SQLite (la version SQLite utilisée par un tel outil peut être un facteur restrictif)