Android 删除 SQL 数据库

标签 android database sqlite android-sqlite android-external-storage

我有一个奇怪的问题,当我卸载应用程序时,我的 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 上。这是我尝试过的过程:

  1. 从手机中删除/卸载应用
  2. 在 Windows 上从 android studio 运行应用程序。问题:数据库仍然存在并且应用程序看到所有旧数据(即使我卸载了应用程序)
  3. 卸载应用
  4. 在我的 macbook 上从 android studio 运行应用程序。没问题!数据库是新的,没有找到现成的数据
  5. 再次卸载应用
  6. 在我的 Windows 机器上再次测试。现在,数据库回来了,应用程序看到了旧的旧数据库信息(来自第 2 步!)。此时卸载并不能摆脱它

所以我现在真的很茫然。为什么在 Mac 上运行就可以了?为什么在 Mac 上运行并清除数据库后,又会重新引入旧的 Windows 数据库?这不应该都是独立于操作系统的吗?

最佳答案

我知道这已经很老了,但我遇到了同样的问题,关闭自动备份修复了它(数据库被保存到云端并恢复)。

进入您的 list ,并在应用程序下添加

android:allowBackup="false"

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

关于Android 删除 SQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36383560/

相关文章:

android - 如何更改顶部的应用程序名称

java - 使用自定义适配器中的变量时遇到问题

java - 如何将列表从类(class)传递到 Activity ?

mysql - 在两个表之间如何选择一个特定值的id存在的表mysql(重复)

database - 如何保护 Redis 集群?

无限循环中的Python用户输入太慢,容易混淆

java - 在 Mac 上的 Android Studio 中找不到 OnePlus One

android - 是否可以使用 Android Room 数据库创建 R*Tree 表?

Android SQLite 数据库重新导入

r - 永久保留SQLite中的更改