备份 Android 中的 SQLite 数据库

9

我需要对移动设备的内部存储或SD卡中的SQLite数据库进行离线备份。但我一无所知,这有可能吗。

我在SO上跟随了很多主题,但它们建议将DB从一个位置复制到另一个位置,这对我来说不合适,也不适用于Google Drive。

任何指导都是宝贵的。


那么对你来说什么是合适的呢? - earthw0rmjim
  1. 将您的数据库复制到SD卡中。
  2. 如果重新安装应用程序,请将数据库复制回应用程序。
- Kingfisher Phuoc
https://dev59.com/u3I-5IYBdhLWcg3wJE0K - ॐ Rakesh Kumar
@RakeshKumar 我已经查看了那个线程,但我无法在模拟器中复制任何内容。(没有在任何实体设备上尝试过)。 - Mohammedsalim Shivani
好的,我会尝试并回复。 - Mohammedsalim Shivani
显示剩余3条评论
2个回答

3
我使用了这种方法。
public string DATABASE_NAME = "YOUR DATABASE NAME HERE";

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

            if (sd.canWrite()) {
                Log.d("TAG", "DatabaseHandler: can write in sd");
                //Replace with YOUR_PACKAGE_NAME and YOUR_DB_NAME
                String currentDBPath = "filepath here"+DATABASE_NAME;
                //Replace with YOUR_FOLDER_PATH and TARGET_DB_NAME in the SD card
                String copieDBPath = DATABASE_NAME;
                File currentDB = new File(data, currentDBPath);
                File copieDB = new File(sd, copieDBPath);
                if (currentDB.exists()) {
                    Log.d("TAG", "DatabaseHandler: DB exist");
                    @SuppressWarnings("resource")
                    FileChannel src = new FileInputStream(currentDB).getChannel();
                    @SuppressWarnings("resource")
                    FileChannel dst = new FileOutputStream(copieDB).getChannel();
                    dst.transferFrom(src, 0, src.size());
                    src.close();
                    dst.close();
                }
            }
        } catch  (Exception e) {
            e.printStackTrace();
        }

    } 

//请将YOUR_PACKAGE_NAME和YOUR_DB_NAME替换为您的包名和数据库名称,如果您使用“String currentDBPath = context.getDatabasepath(database).getPath();”其中context是Context,database是数据库名称,则无需硬编码包名。 - MikeT
@MohammedsalimShivani 从这样的文件中恢复(基本上是备份的反向操作)确实可以工作(尽管您可能会发现需要重新启动应用程序或者这样做更简单)。但是我建议,在还原时,最好先复制原始数据库(以便如果还原失败,您可以恢复到原始数据库)。 - MikeT

2
最终,借助这个 GitHub示例 ,我成功地实现了所需的任何自定义。现在已经上线了。

1
我无法运行那个示例。你能分享一下你是怎么做的吗?一种 SQLite 文件无法备份到 Google Drive。提前谢谢。 - kksal55
你遇到了什么问题?我没有尝试过Google Drive备份,因为我不需要。 - Mohammedsalim Shivani
我尝试将位于assets文件夹中的sqlite数据库备份到Google Drive,但是没有成功。 Google上个月使用了GDA API。 - kksal55
你的SQLite数据库是否存储在assets文件夹中? - Mohammedsalim Shivani
是的。在Assets文件夹内。 - kksal55
这个帖子说你不能将你的数据库复制到assets文件夹中。 - Mohammedsalim Shivani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接