In the tutorials I am following and a lot of more places I see this, onUpgrade -> drop table if exists, then recreate table.

这样做的目的是什么?

private static class DbHelper extends SQLiteOpenHelper{

    public DbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                KEY_NAME + " TEXT NOT NULL, " +
                KEY_HOTNESS + " TEXT NOT NULL);"
        );  
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
        onCreate(db);
    }       
}

推荐答案

我同意当您升级时,您应该向数据库中添加列或表.大多数onUpgrade示例实际上都很糟糕,因为为什么我要删除所有这些数据,然后重新创建表?我发现了这篇博客文章,我把它叫做Adams Incremental Update Method.它还可以处理用户可能没有在每个版本中升级您的应用程序的情况.

Here is a good blog on sqlite onupgrade that doesn't do drop table.

Database相关问答推荐

Metasploit 数据库警告

您是否遇到过 SQL Server 因为引用了太多表而无法执行的查询?

用于存储人与聊天消息的数据库设计

是否有一个简单的工具可以将 mysql 转换为 postgresql 语法?

多列索引的顺序

免费的 SQL 比较工具

存储过程的缺点

存储所有排列的模式数据库

关系数据库如何在幕后工作?

将实体框架中的字符串列映射到枚举

有没有办法在一个脚本中创建多个触发器?

使用存储过程是一种不好的做法吗?

处理hibernate entities上的数据库视图的优雅方法?

为什么在 Hibernate 中不推荐hibernate.connection.autocommit = true?

从 postgresql 转储文件填充 MySQL 数据库

如果表不存在,如何使用 Derby Db 创建表

你如何记录你的数据库 struct ?

Apache Spark 的主键

将 NULL 插入 MySQL 时间戳

如何在 Java 中检测 SQL 表的存在?