是否保存为替换SQLite数据库

问题描述 投票:0回答:1

我在应用程序中添加了一个选项,用户可以将其备份到Google云端硬盘。


我正在获得对数据库的引用,如下所示:

File dbFile = new File(context.getDatabasePath(DATABASE_NAME).getAbsolutePath());

当我登录上面的内容以获取路径时,将返回它-/data/user/0/my.package.name/databases/DatabaseName.DB

然后我创建数据库副本并将其上传到Google云端硬盘。

这很好。


现在,在另一台设备上,我将数据库下载到应用程序的目录中。保存后,通过执行以下操作移动/替换旧数据库:

try {
    //The database is stored here from Google Drive
    File directoryFile = context.getExternalFilesDir("BackupDB");
    InputStream mInput = new FileInputStream(directoryFile+"/DatabaseName.DB");
    //Path to current database - /data/user/0/my.package.name/databases/DatabaseName.DB
    String outFileName = context.getDatabasePath(DATABASE_NAME).getAbsolutePath();
    OutputStream mOutput = new FileOutputStream(outFileName);
    byte[] mBuffer = new byte[1024];
    int mLength;
    while ((mLength = mInput.read(mBuffer))>0){
        mOutput.write(mBuffer, 0, mLength);
    }
    mOutput.flush();
    mOutput.close();
    mInput.close();

} catch (Exception e) {
    e.printStackTrace();
}

以上在我的设备上正常工作。


[我见过有人说/data/data/只能由有根设备访问,但是我也见过很多人说我们可以覆盖应用程序的数据库。

我的问题:

我在所有android版本上访问和覆盖我的应用程序数据库是否安全?还是有限制?

java android android-sqlite android-file
1个回答
0
投票

我不认为这有问题,因为您正在访问应用程序数据专用的目录,并且在删除应用程序后将其删除,请检查此页上的表:

Data and file storage overview

[另一方面,为什么不使用Cloud Firestore DB而不是备份sqlite DB并将其存储到Google驱动器然后下载等。

只需在FireBase CoudFirestore上创建数据库并使用规则保护它,使用API​​将您的数据库加载到任何设备上的应用程序中,然后将其本地存储在Room DB中,将Room用作应用程序的单个真实来源。

© www.soinside.com 2019 - 2024. All rights reserved.