sql >> Databáze >  >> RDS >> SQLite

Nejlepší způsoby, jak vytvořit zálohy pro offline aplikace?

Je velmi málo potřeba dělat něco složitého, spíše jednoduše uložit soubor SQLiteDatabase.

V podstatě zavřete Room db a poté soubor uložte.

např. následující je velmi základní příklad, který se ukládá do adresáře pro stahování v podadresáři s názvem 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
        );
    }
}
  • Všimněte si, že metody onCreate a authenticStoragePermissions jsou zahrnuty pouze pro získání oprávnění k zápisu do externího úložiště (všimněte si, že uživatelská oprávnění jsou také nastavena v manifestu).

    • Důležité je to provést mimo místnost (podobně, pokud byste obnovovali ze zálohy).

Po spuštění :-

A pak zkopírování souboru do PC a otevření pomocí SQLite Manager :-

To je zcela podle očekávání a jak je ukázáno, je vysoce přenosné, tj. můžete jej vložit do jakéhokoli nástroje SQLite (verze SQLite používaná takovým nástrojem může být omezujícím faktorem)




  1. Jak testovat překrývající se data v PostgreSQL

  2. Zřetězit více řádků výsledků jednoho sloupce do jednoho, seskupit podle jiného sloupce

  3. Seznam všech indexů a indexových sloupců v SQL Server DB

  4. SQL – Najděte chybějící hodnoty int v většinou uspořádaných sekvenčních řadách