SQLite
 sql >> Baza danych >  >> RDS >> SQLite

Pokoj najlepsze sposoby tworzenia kopii zapasowych dla aplikacji offline?

Nie ma potrzeby robienia czegokolwiek skomplikowanego, raczej po prostu zapisz plik SQLiteDatabase.

Zasadniczo zamknij Room db, a następnie zapisz plik.

np. poniżej jest bardzo prosty przykład, który zapisuje w katalogu downloads w podkatalogu o nazwie 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
        );
    }
}
  • Zwróć uwagę na metody onCreate i VerifyStoragePermissions zawarte tylko w celu uzyskania uprawnień do zapisu w pamięci zewnętrznej (uwaga:uprawnienia użytkownika są również ustawione w manifeście).

    • Importem jest zrobienie tego poza pokojem (podobnie, jeśli miałbyś przywrócić z kopii zapasowej).

Po uruchomieniu :-

A następnie kopiowanie pliku na komputer i otwieranie za pomocą SQLite Manager :-

Jest to całkowicie zgodne z oczekiwaniami i, jak pokazano, wysoce przenośne, tj. można je wrzucić do dowolnego narzędzia SQLite (wersja SQLite używana przez takie narzędzie może być czynnikiem ograniczającym)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 sposoby na wyświetlenie tabel w bazie danych SQLite

  2. Jak zainstalować SQLite na macOS

  3. Ograniczenie tabeli SQLite unikalne i użycie ON CONFLICT REPLACE

  4. Błąd Android SQLite:numer zmiennej musi mieścić się w zakresie od ?1 do? 999?

  5. Zastrzeżenia dotyczące Pythona i SQLite