备份和恢复SQLite数据库到SD卡

我怎样才能在我的应用程序中自动备份我的数据库到SD卡? 之后,如何恢复?

这是我的代码:

// Local database InputStream input = new FileInputStream(from); // create directory for backup File dir = new File(DB_BACKUP_PATH); dir.mkdir(); // Path to the external backup OutputStream output = new FileOutputStream(to); // transfer bytes from the Input File to the Output File byte[] buffer = new byte[1024]; int length; while ((length = input.read(buffer))>0) { output.write(buffer, 0, length); } output.flush(); output.close(); input.close(); 

我怎么能我的数据库自动备份到我的应用程序的SD卡?

使用标准的Java I / O复制它。 请确保您没有任何打开的SQLiteDatabase对象,但。

之后如何恢复?

使用标准的Java I / O复制它。 请确保您没有任何打开的SQLiteDatabase对象到旧的数据库,但。

你可以在SQLiteDatabase对象上使用getPath()来找出它所在的位置,AFAIK(还没有试过这个)。

感谢现有的答案。 这里是完整的类(使用“getDatabasePath”):

 package com.levionsoftware.bills.data.db; import android.content.Context; import android.os.Environment; import android.widget.Toast; import com.levionsoftware.bills.MyApplication; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.channels.FileChannel; /** * Created by denny on 16/05/2016. * Source: http://stackoverflow.com/questions/18322401/is-it-posible-backup-and-restore-a-database-file-in-android-non-root-devices */ public class BackupAndRestore { public static void importDB(Context context) { try { File sd = Environment.getExternalStorageDirectory(); if (sd.canWrite()) { File backupDB = context.getDatabasePath(DBHandler.getDBName()); String backupDBPath = String.format("%s.bak", DBHandler.getDBName()); File currentDB = new File(sd, backupDBPath); FileChannel src = new FileInputStream(currentDB).getChannel(); FileChannel dst = new FileOutputStream(backupDB).getChannel(); dst.transferFrom(src, 0, src.size()); src.close(); dst.close(); MyApplication.toastSomething(context, "Import Successful!"); } } catch (Exception e) { e.printStackTrace(); } } public static void exportDB(Context context) { try { File sd = Environment.getExternalStorageDirectory(); File data = Environment.getDataDirectory(); if (sd.canWrite()) { String backupDBPath = String.format("%s.bak", DBHandler.getDBName()); File currentDB = context.getDatabasePath(DBHandler.getDBName()); File backupDB = new File(sd, backupDBPath); FileChannel src = new FileInputStream(currentDB).getChannel(); FileChannel dst = new FileOutputStream(backupDB).getChannel(); dst.transferFrom(src, 0, src.size()); src.close(); dst.close(); MyApplication.toastSomething(context, "Backup Successful!"); } } catch (Exception e) { e.printStackTrace(); } } } 

https://stackoverflow.com/a/18322762/293280

上面的重复问题的答案提供了一个很好的例子,导入和导出您的SQLite数据库到SD卡。 看一看。