Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> 安卓開發數據庫備份和還原實例

安卓開發數據庫備份和還原實例

編輯:Android開發實例

  新建一個類繼承 AsyncTask

  public class BackupTask extends AsyncTask<String, Void, Integer> {

  private static final String COMMAND_BACKUP = "backupDatabase";

  public static final String COMMAND_RESTORE = "restroeDatabase";

  private Context mContext;

  public BackupTask(Context context) {

  this.mContext = context;

  }

  @Override

  protected Integer doInBackground(String... params) {

  // TODO Auto-generated method stub

  // 獲得正在使用的數據庫路徑,我的是 sdcard 目錄下的 /dlion/db_dlion.db

  // 默認路徑是 /data/data/(包名)/databases/*.db

  File dbFile = mContext.getDatabasePath(Environment

  .getExternalStorageDirectory().getAbsolutePath()

  + "/dlion/db_dlion.db");

  File exportDir = new File(Environment.getExternalStorageDirectory(),

  "dlionBackup");

  if (!exportDir.exists()) {

  exportDir.mkdirs();

  }

  File backup = new File(exportDir, dbFile.getName());

  String command = params[0];

  if (command.equals(COMMAND_BACKUP)) {

  try {

  backup.createNewFile();

  fileCopy(dbFile, backup);

  return Log.d("backup", "ok");

  } catch (Exception e) {

  // TODO: handle exception

  e.printStackTrace();

  return Log.d("backup", "fail");

  }

  } else if (command.equals(COMMAND_RESTORE)) {

  try {

  fileCopy(backup, dbFile);

  return Log.d("restore", "success");

  } catch (Exception e) {

  // TODO: handle exception

  e.printStackTrace();

  return Log.d("restore", "fail");

  }

  } else {

  return null;

  }

  }

  private void fileCopy(File dbFile, File backup) throws IOException {

  // TODO Auto-generated method stub

  FileChannel inChannel = new FileInputStream(dbFile).getChannel();

  FileChannel outChannel = new FileOutputStream(backup).getChannel();

  try {

  inChannel.transferTo(0, inChannel.size(), outChannel);

  } catch (IOException e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

  } finally {

  if (inChannel != null) {

  inChannel.close();

  }

  if (outChannel != null) {

  outChannel.close();

  }

  }

  }

  }

  在 mainActivity 裡異步加載備份、還原:

  // 數據恢復

  private void dataRecover() {

  // TODO Auto-generated method stub

  new BackupTask(this).execute("restroeDatabase");

  }

  // 數據備份

  private void dataBackup() {

  // TODO Auto-generated method stub

  new BackupTask(this).execute("backupDatabase");

  }

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved