SQLite
 sql >> база данни >  >> RDS >> SQLite

Най-добрите начини за създаване на резервни копия за офлайн приложение?

Има много малка нужда да правите нещо сложно, по-скоро просто запишете файла SQLiteDatabase.

По принцип затворете Room db, след което запазете файла.

напр. следното е много елементарен пример, който записва в директорията за изтегляния в поддиректория, наречена 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
        );
    }
}
  • Обърнете внимание на методите onCreate и verifyStoragePermissions, включени само, за да получите разрешение за запис във външно хранилище (обърнете внимание, че потребителските разрешения също са зададени в манифеста).

    • Импортирането е да направите това извън стаята (по същия начин, ако трябва да възстановите от резервно копие).

След изпълнение :-

И след това копиране на файла на компютър и отваряне с SQLite Manager :-

Това е напълно според очакванията и както е показано много преносимо, т.е. можете да го пуснете във всеки инструмент на SQLite (версията на SQLite, използвана от такъв инструмент, може да бъде ограничаващ фактор)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLite - Импортиране на данни от CSV файл

  2. Търсене с акцент в sqlite (android)

  3. Вмъкнете времеви печат в базата данни чрез ContentValues

  4. Как работи SQLite Char().

  5. Android Sqlite при надграждане изтриване на таблица от базата данни