Android删除SQL数据库

时间:2016-04-03 09:07:50

标签: 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访问权限

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

我当前的问题是如何在没有超级用户权限的情况下从手机中手动删除数据库?

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

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

编辑:

这变得越来越陌生。这似乎只发生在Windows上。这是我尝试的过程:

  1. 从手机中删除/卸载应用
  2. 在Windows上从android studio运行应用程序。问题:数据库仍然存在,应用程序看到所有旧数据(即使我卸载了应用程序)
  3. 卸载应用
  4. 在我的macbook上从android studio运行应用程序。没问题!数据库是新鲜的,没有找到现有数据
  5. 再次卸载应用
  6. 在我的Windows机器上再次测试。现在,数据库返回,应用程序看到旧的​​旧数据库信息(从第2步开始!)。此时卸载并没有摆脱它
  7. 所以我现在真的很茫然。为什么在Mac上运行会好吗?为什么在Mac上运行并清理数据库后,再次带上旧的Windows数据库呢?这不应该与操作系统无关吗?

2 个答案:

答案 0 :(得分:2)

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

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

android:allowBackup="false"

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

答案 1 :(得分:0)

如果存在,则可以修改查询以删除表:

DROP TABLE table_name IF EXISTS;

然后

CREATE TABLE table_name IF NOT EXISTS

此外,如果您想从模拟器中手动删除.db文件,或者您的设备要转到工具 - > Android-> Android设备监视器:

enter image description here

然后找到文件资源管理器:

enter image description here

然后删除.db文件。

希望它有所帮助!!!