如果调用 onUpgrade,我将尝试完全删除数据库。根据这个 SO 问题:How to delete SQLite database from Android programmatically我可以调用 context.deleteDatabase(String dbName)
,但我无法在 onUpgrade 方法中获取上下文。在 onUpgrade 中有一个传入的 db 对象,我看到您可以使用 db.deleteDatabase()
方法,但它需要一个文件。我没有数据库文件。有什么方法可以做 db.deleteSelf
或类似的事情吗?我知道我可以只删除表而不是完全删除数据库,但是我的数据库结构已经完全改变,我宁愿只调用 deleteDb();
然后调用 onCreate(db) ;
再次。
最佳答案
I'm trying to delete a database entirely if onUpgrade gets called.
请记住,清除所有用户数据可能会使用户变得非常暴躁,就像“Play 商店中的一星评级”级别的暴躁。
此外,你想要的是相当冒险的。您可能会搞砸架构版本元数据。即使假设您尝试做的事情总体上是明智的,我还是建议您简单地调用 execSQL()
在 SQLiteDatabase
上执行 DROP TABLE
您创建的每个表的语句(加上 DROP INDEX
等)。
I can just call context.deleteDatabase(String dbName), but I can't get to context in the onUpgrade method
你的 SQLiteOpenHelper
子类传递了一个 Context
在它的构造函数中。虽然它没有通过 getter 方法公开,但您可以持有 Context
你自己在数据成员中。
I know that I could just drop tables and such instead of totally deleting the database, but my db structure has totally changed and I would rather just call deleteDb(); and then onCreate(db); again.
除了调用onCreate()
不会创建您的数据库。您将删除数据库。所以,除非你自己创建一个空的数据库文件,onCreate()
会崩溃。 onCreate()
在创建数据库时调用;它不是“为我创建一个数据库”。
此外,如果此应用仍在开发中,只需在再次运行之前卸载该应用,这将清除数据库(假设它存储在典型位置)。
关于android - 在 Android 中删除整个数据库 onUpgrade?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25611639/