2

我有一个奇怪的问题在那里,当我卸载的应用的Android删除SQL数据库

我没有创造任何外部存储目录数据库我的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. 删除/从Windows上的Android工作室电话
  2. 运行的应用程序卸载的应用。问题:数据库仍然存在,应用程序看到所有旧数据(即使我卸载了应用程序)
  3. 卸载应用程序
  4. 从我的macbook上的android studio运行应用程序。没问题!该数据库是新鲜的,没有找到现有数据
  5. 再次卸载应用程序
  6. 在我的Windows机器上再次测试。现在,数据库回来了,应用程序可以看到旧的旧数据库信息(来自步骤2!)。卸载在这一点上并没有摆脱它

所以我真的很亏了。为什么在Mac上运行会好?为什么在Mac上运行并清理数据库之后,再次使用旧的Windows数据库?这不应该都是独立于操作系统吗?

DROP TABLE table_name IF EXISTS; 

然后

CREATE TABLE table_name IF NOT EXISTS 

此外,如果你想手动删除模拟器或.db文件:

+0

在您的应用程序中,您可以检查表是否存在,您可以删除该表并创建一个新表 –

+0

哇。这确实很奇怪!你有没有在你的数据库中设置一些特殊的东西,因为默认情况下,当卸载应用程序时,数据库也会被删除。 –

+0

我的db中没有什么特别的。只有2个表,一个表有一个外键,这是特殊的,因为它得到 – Simon

回答

0

如果存在这样您可以修改查询删除表设备是去工具 - > Android-> Android设备监控:

enter image description here

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

enter image description here

,然后删除您.db文件。

希望它有帮助!

+0

我目前有'DROP TABLE table_name IF EXISTS'在我的DBHelper'onUpgrade'方法。我的帮手中还有其他地方是否应该放置该代码?此外,设备监控方法不适用于没有根目录的物理设备 – Simon

+0

然后我想你将不得不执行像“DROP TABLE table_name; CREATE TABLE table_name”这样的创建查询并查看它是否运行 –

+0

我认为问题是实际上比以编程方式简单地擦除数据库更大。看到我上面的编辑 – Simon