SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Raum beste Möglichkeiten, Backups für Offline-Anwendungen zu erstellen?

Es ist sehr wenig notwendig, irgendetwas Kompliziertes zu tun, sondern einfach die SQLiteDatabase-Datei zu speichern.

Grundsätzlich Room db schließen und dann die Datei speichern.

z.B. Das Folgende ist ein sehr rudimentäres Beispiel, das im Downloads-Verzeichnis in einem Unterverzeichnis namens DBsaves speichert:-

@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
        );
    }
}
  • Beachten Sie, dass die Methoden onCreate und verifyStoragePermissions nur enthalten sind, um die Berechtigung zum Schreiben in den externen Speicher zu erhalten (beachten Sie, dass die Benutzerberechtigungen auch im Manifest festgelegt sind).

    • Die Importsache ist, dies außerhalb von Room zu tun (ebenso, wenn Sie von einem Backup wiederherstellen würden).

Nach dem Laufen :-

Und dann die Datei auf einen PC kopieren und mit SQLite Manager öffnen :-

Dies ist ganz wie erwartet und wie gezeigt sehr portabel, d.h. Sie können es in jedes SQLite-Tool einfügen (SQLite-Version, die von einem solchen Tool verwendet wird, kann ein einschränkender Faktor sein)