我有一个奇怪的问题,在我卸载应用程序时,我的SQL数据库不会自行删除

我没有在任何外部存储目录中创建数据库,并且已确认该数据库位于其默认位置:/data/data/com.example.app/databases/
卸载应用程序后,我希望该位置上的所有数据都将被擦除,但是当我再次从android studio中运行该应用程序时,新安装仍可以看到所有旧数据

我尝试使用adb从数据库目录中手动删除.db文件,但是当我再次运行该应用程序时,仍然可以看到旧数据

我也尝试进入应用程序设置并清除数据和缓存,但这似乎无济于事

在我的代码中,对数据库做任何“奇怪的事情”的唯一地方是,我在单击按钮时将数据库文件复制到了新位置:

String pathToExternalStorage = Environment.getExternalStorageDirectory().toString();
File exportDir = new File(pathToExternalStorage, "/SensorData");
File subjectDataDir = new File(exportDir, "/subjects");

File data = Environment.getDataDirectory();
String currentDBPath = "//data//com.example.app//databases//" + DBHelper.DATABASE_NAME;
File currentDB = new File(data, currentDBPath);
File destDB = new File(exportDir, DBHelper.DATABASE_NAME);

FileChannel src = new FileInputStream(currentDB).getChannel();
FileChannel dst = new FileOutputStream(destDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();

然后在新创建的文件上运行mediascanner,这样我就可以立即对其进行MTP访问

我怀疑这两个过程中的任何一个都会导致这种情况发生吗?

我的直接问题是如何在没有root用户访问权限的情况下从手机中手动删除数据库?

更大的问题是什么可能导致卸载过程无法删除数据库文件?新安装的应用程序版本(卸载后)仍如何查看旧的数据库信息?

我不确定如何开始解决这个问题...

编辑:

这越来越陌生了。这似乎仅在Windows上发生。这是我尝试的过程:
  • 从手机
  • 删除/卸载应用程序
  • 在Windows上从android studio运行应用。问题:数据库仍然存在,并且应用程序可以看到所有旧数据(即使我卸载了该应用程序)
  • 卸载应用程序
  • 从我的Macbook上的android studio运行应用程序。没问题!数据库是新的,找不到现有数据
  • 再次卸载应用程序
  • 在Windows计算机上再次测试。现在,数据库又恢复了,应用程序看到了旧的旧数据库信息(从第2步开始!)。此时卸载并不能摆脱它

  • 所以我现在真的很茫然。为什么在Mac上运行就可以了?在Mac上运行并清理数据库后,为什么又要重新使用旧的Windows数据库呢?难道这不都是与操作系统无关的吗?

    最佳答案

    我知道这已经很老了,但是我遇到了同样的问题,并关闭了自动备份功能以修复它(数据库已保存到云中并还原了)。

    进入 list ,然后在应用程序下添加

    android:allowBackup="false"
    

    希望这对遇到此问题的任何人有所帮助。

    10-01 22:44
    查看更多