sql >> Database >  >> RDS >> SQLite

Beste manieren om back-ups te maken voor offline toepassingen?

Het is niet nodig om iets ingewikkelds te doen, u hoeft alleen maar het SQLiteDatabase-bestand op te slaan.

Sluit Room db in principe af en sla het bestand op.

bijv. het volgende is een zeer rudimentair voorbeeld dat wordt opgeslagen in de downloadmap in een submap met de naam 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
        );
    }
}
  • Let op de methoden onCreate en confirmStoragePermissions die alleen zijn opgenomen om toestemming te krijgen om naar externe opslag te schrijven (let op gebruikersrechten die ook in manifest zijn ingesteld).

    • Het importeren is om dit buiten Room te doen (ook als je zou herstellen vanaf een back-up).

Na het rennen:-

En dan het bestand naar een pc kopiëren en openen met SQLite Manager:-

Dit is volledig zoals verwacht en zoals getoond zeer draagbaar, d.w.z. je kunt het in elke SQLite-tool plaatsen (SQLite-versie die door een dergelijke tool wordt gebruikt, kan een beperkende factor zijn)




  1. Hoe kan ik deze opmerkingen in een MySQL-dump verwijderen?

  2. probleem bij het vinden van een lijst met bestanden in de map

  3. Hoe de grootte van een MySQL-database te krijgen?

  4. Een database verbinden met Python