在Android中删除整个数据库onUpgrade吗?

EGH*_*HDK 3 database sqlite android android-sqlite

如果尝试调用onUpgrade,我将尝试完全删除数据库。根据这个SO问题:如何以编程方式从Android删除SQLite数据库,我只能调用context.deleteDatabase(String dbName),但无法在onUpgrade方法中访问上下文。在onUpgrade中,传入了一个db对象,我看到您可以使用一个db.deleteDatabase()方法,但是它需要一个文件。我没有数据库文件。有什么办法db.deleteSelf或类似的方法吗?我知道我可以删除表等而不是完全删除数据库,但是我的数据库结构已经完全更改,我宁愿先调用deleteDb();然后onCreate(db);再调用。

Com*_*are 5

如果尝试调用onUpgrade,我将尝试完全删除数据库。

请记住,清除所有用户数据可能会使用户变得非常怪异,例如“ Play商店中的一星级”级别的怪异。

另外,您想要的是相当冒险的。您可以破坏模式版本元数据。即使假设您尝试执行的操作总体而言是明智的,我还是建议您只需execSQL()对创建的每个表调用SQLiteDatabase加执行DROP TABLE语句(加DROP INDEX号等)。

我只能调用context.deleteDatabase(String dbName),但无法在onUpgrade方法中访问上下文

您的SQLiteOpenHelper子类Context在其构造函数中传递了一个。尽管这不是通过getter方法公开的,但是您可以将Context自己保存在数据成员中。

我知道我可以删除表等而不是完全删除数据库,但是我的数据库结构已经完全更改,我宁愿只调用deleteDb();。然后onCreate(db); 再次。

除非调用onCreate()不会创建您的数据库。您将删除数据库。因此,除非您自己创建一个空的数据库文件,否则onCreate()它将崩溃。onCreate()在创建数据库时被调用;它不是“为我创建数据库”。

另外,如果此应用仍在开发中,则只需在再次运行该应用之前先将其卸载即可,这将清除数据库(假设它存储在典型位置)。