SQLite - Java - onCreate和onUpgrade - Android

时间:2016-09-29 18:25:01

标签: java android sqlite

你好我已经创建了我的第一个应用程序,它使用我自己的类继承SQLiteOpenHelper

在本地私有数据库中收集一些基本信息

我注意到在继承时我必须实现一些方法:

  @Override
    public void onCreate(SQLiteDatabase db) {

    }

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

    }

我注意到的是:在很多教程中,我看到人们都在使用这样的东西:

 @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE table_name (parameters  here...)");
    }

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

问题

我认为上述方法中的代码执行此操作:每当用户重新启动应用程序时,它应该删除整个表并重新创建它,但事实并非如此,那么它的目标是什么?我刚刚在手机上测试了它,基本上我关闭应用程序并杀死它的进程,然后重新打开它,表仍然存在与之前的内容,它不是我的目标,确定我想保留我所有的数据库会议,但我只是没有得到这个示例代码......

以哪种方式调用?

我认为第一个是构造函数然后onCreate然后onUpgrade但是它不会删除表,所以它意味着onUpgrade没有被调用?

2 个答案:

答案 0 :(得分:1)

public void onUpgrade()onResume()不同。仅当用户使用较新版本更新其应用时,才会调用onUpgrade()。重启 - >致电onCreate()onResume()

例如:

当您第一次创建应用时,您拥有带有FIRSTNAME和LASTNAME的表EMPLOYEE

但是在您的应用的第2版(将在稍后发布)中,您将新列MIDDLENAME添加到此表中,然后将使用onUpgrade()调用(对于正在升级到新版本的用户)。

基于SQLiteOpenHelper documentation

  

需要升级数据库时调用。实施   应该使用此方法删除表,添加表或执行任何其他操作   它需要升级到新的架构版本。

答案 1 :(得分:1)

在创建数据库时调用

onCreate()

增加数据库版本号时会调用

onUpgrade()。在这种情况下,您将删除表格中的所有内容并重新开始。

如果要像这样清除数据库,每次应用程序恢复时,您都必须手动删除表。然后再次调用onCreate()重建它。