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

Værelse bedste måder at oprette sikkerhedskopier til offline applikation?

Der er meget lidt behov for at gøre noget komplekst, snarere blot at gemme SQLiteDatabase-filen.

Luk som udgangspunkt Room db og gem derefter filen.

for eksempel. det følgende er et meget rudimentært eksempel, der gemmer til download-mappen i en undermappe kaldet 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
        );
    }
}
  • Bemærk, at onCreate og verifyStoragePermissions-metoderne kun er inkluderet for at få tilladelse til at skrive til eksternt lager (bemærk, at brugertilladelser også er angivet i manifestet).

    • Det, der skal importeres, er at gøre dette uden for Room (også hvis du skulle gendanne fra en sikkerhedskopi).

Efter at have kørt :-

Og derefter kopiere filen til en pc og åbne med SQLite Manager :-

Dette er helt som forventet og som vist meget bærbart, dvs. du kan droppe det i ethvert SQLite-værktøj (SQLite-version, der bruges af et sådant værktøj, kan være en restriktiv faktor)




  1. MySQL GROUP BY adfærd

  2. Tilføj IIS 7 AppPool-identiteter som SQL Server-logoner

  3. ROWIDTONCHAR() Funktion i Oracle

  4. postgresql single instace installationer