为什么SQLiteOpenHelper在"onUpgrade"方法中删除表?

S.J*_*Lim 1 android android-sqlite

我学会了最近在Android OS上使用SQLite3的方法.但它有一个不可接受的部分.

我无法理解为什么在调用SQLiteOpenHelper的"onUpgrade"方法时删除表.为什么需要"onUpgarde"方法?

如果代码执行"drop table",旧版本DB的表数据将被删除,不是吗?

为什么要删除旧数据库的现有数据?

删除表时如何恢复现有的DB数据?


[这是学习代码]

public class MySQLiteOpenHelper extends SQLiteOpenHelper {

    final String CONFIRMED_SHEETS_TABLE = "confirmed_sheets";

    public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        String sql = "create table" +
                CONFIRMED_SHEETS_TABLE +
                "_id integer primary key autoincrement, " +
                "group text, " +
                "num001 text, " +
                "num002 text, " +
                "num003 text, " +
                "num004 text, " +
                "num005 text, " +
                "num006 text, " +
                "date text)";
        sqLiteDatabase.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {

        // non acceptable part //
        String sql = "drop table if exists " + CONFIRMED_SHEETS_TABLE;
        sqLiteDatabase.execSQL(sql);

        onCreate(sqLiteDatabase);
    }
}
Run Code Online (Sandbox Code Playgroud)

A--*_*--C 5

如果代码执行"drop table",旧版本DB的DB表数据将被删除,不是吗?

为什么需要"onUpgrade"方法?

如果要切换数据库(例如,因为您添加了新列),您的应用程序(通常)现在取决于该更改.增加Helper类调用中的数据库版本onUpgrade(),这允许您处理任何迁移以准备应用程序以使用新架构.

你知道为什么学习代码执行"drop table"吗?

方便.它不一定是正确的方法,但数据库更改可能会使旧数据难以合并并将其合并到新表中.因此,简单地重新开始就更容易逻辑化.

如果要合并现有表和新表,请查看此问题.