如何备份SQLite数据库?

时间:2017-09-13 11:21:58

标签: android sqlite android-sqlite

我正在尝试备份android sqlite db。如果我运行代码一个文件夹是按照我在程序中给出的那样创建的。但是该文件夹是空的,请帮我备份我的数据库以及如何查看它。我正在使用Firefox sqlite manager。当我点击按钮备份数据库时,帮我备份我的数据库。

我的代码:

public void exportDatabase(String databaseName) {

    try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath = "//data//"+getPackageName()+"//databases//"+databaseName+"";
            String backupDBPath = "PRIM.sqlite";
            File currentDB = new File(data, currentDBPath);
            File backupDB = new File(sd, backupDBPath);
            System.out.println("@@ Enter 12222222222222");
            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(currentDB).getChannel();
                FileChannel dst = new FileOutputStream(backupDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
                System.out.println("@@ Enter 2");
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

2 个答案:

答案 0 :(得分:0)

看起来您正在尝试写入SD卡等外部存储设备。您需要在清单或运行时具有该权限。

https://developer.android.com/training/basics/data-storage/files.html#GetWritePermission

答案 1 :(得分:0)

这就是我在平板电脑上捕获EXTERNAL SD CARD路径的方法,它适用于所有具有SD卡的设备

var mainGroup = [String]()

var myDict: NSDictionary?
if let path = Bundle.main.path(forResource: "menu", ofType: "plist") {
    myDict = NSDictionary(contentsOfFile: path)
}
if let dict = myDict {

    print(dict)

    for (_, value) in dict {

        mainGroup.append("\(value)")
    }

    print(mainGroup)
}

THE_PATH是一个公共静态字符串,所以我可以在我的DBHelper中使用它,截至目前我在加载器Activity上捕获此路径