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

标签 android database sqlite android-sqlite

如果调用 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/

相关文章:

sql - Doctrine 2 中的复杂查询

php - 数据库设计困境

sql - 标签或标记的数据库设计

Mysql LEFT JOIN 三表返回多行

c++ - sqlite3 c++ 中的主键错误

Sqlite JDBC 驱动程序不支持 RETURN_GENERATED_KEYS

android - 当其他表有外键时更改 sqlite 中的列名

android - 从纬度和经度坐标数组列表向谷歌地图添加多个标记

java - 如何设置文本编号格式?

java - 插入到 HashMap 中会导致排序困惑