Esq*_*uth 29 database sqlite android drop-table database-update
在我正在关注的教程和我看到的更多地方,onUpgrade - > drop table if exists,然后重新创建表.
这样做的目的是什么?
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);
    }       
}
小智 32
嗯,Android应用程序中最常见的方法是在数据库升级有序时"重新"用户.并且考虑到任何本地数据库应该仅镜像服务器端应用程序上的内容,只需删除数据库,重新创建数据库并从服务器重新填充,而不是仔细规划从一个版本到另一个版本的迁移.
它当然不是最好的方法,但它更容易.
举例来说明它将如何实现迁移(从旧版本的数据库更改为更新的版本)
让我们在您的DbHelper类中定义您的数据库是版本1,在更高版本的应用程序(版本2)中,您需要在其中一个表中添加更多列.
因此,您需要升级表并通过ALTER TABLE {tableName} ADD COLUMN COLNew {type}添加列;
检查此链接 - > 在sqlite中将新列插入表中?
所以你的onUpgrade()方法必须通过添加以下内容来反映这种变化:
 @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    switch(oldVersion){
        case 1:
            db.execSQL("ALTER TABLE " + DATABASE_TABLE + " ADD COLUMN " + NEW_COLUMN_NAME + TYPE);
    }
}  
dan*_*117 32
我同意在升级时应该添加列或向数据库添加表.大多数onupgrade样本实际上很糟糕,因为为什么我删除所有这些数据然后重新创建表?我发现这个博客文章我称之为Adams增量更新方法.它还处理用户可能未在每个版本中升级您的应用程序的情况.
这是一个关于sqlite onupgrade的好博客,不做drop table.
| 归档时间: | 
 | 
| 查看次数: | 37050 次 | 
| 最近记录: |