SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

Phòng cách tốt nhất để tạo bản sao lưu cho ứng dụng ngoại tuyến?

Không cần phải làm bất cứ điều gì phức tạp, thay vào đó chỉ cần lưu tệp SQLiteDatabase.

Về cơ bản, hãy đóng Room db rồi lưu tệp.

ví dụ. sau đây là một ví dụ rất thô sơ lưu vào thư mục tải xuống trong một thư mục con có tên là 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
        );
    }
}
  • Lưu ý rằng các phương thức onCreate và verifyStoragePermissions chỉ được bao gồm để có quyền ghi vào bộ nhớ ngoài (lưu ý rằng quyền của người dùng cũng được đặt trong tệp kê khai).

    • Việc nhập là thực hiện việc này bên ngoài Room (tương tự như vậy nếu bạn khôi phục từ bản sao lưu).

Sau khi chạy:-

Và sau đó sao chép tệp vào PC và mở bằng Trình quản lý SQLite:-

Điều này hoàn toàn như mong đợi và như được hiển thị có tính di động cao, tức là bạn có thể thả nó vào bất kỳ công cụ SQLite nào (Phiên bản SQLite được sử dụng bởi một công cụ như vậy có thể là một yếu tố hạn chế)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Id tài nguyên có thay đổi mỗi khi ứng dụng khởi động không

  2. Sử dụng khóa chính với WithoutRowID

  3. Cách sử dụng lớp databasehelper trong lớp asynctask làm việc trên một lớp khác

  4. Làm cách nào để có được số hàng trong sqlite bằng Android?

  5. Ngoại lệ truy vấn SQLite Mã lỗi Cú pháp Android Studio 1