java - SQLite - Java - onCreate 和 onUpgrade - Android

标签 java android sqlite

您好,我已经创建了我的第一个应用程序,它使用我自己的继承SQLiteOpenHelper的类在其本地私有(private)数据库中收集一些基本信息

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

  @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);
}

问题

我认为上述方法中的代码是这样做的:每当用户重新启动应用程序时,它应该删除整个表并重新创建它,但事实并非如此,那么它的目标是什么?我刚刚在我的手机上测试了它,基本上我关闭了应用程序并终止了它的进程,然后重新打开它,表格仍然存在,其中包含以前的内容,这不是我的目标,当然我想在所有内容之间保留我的数据库 session ,但我只是没有得到这个示例代码...

按什么顺序调用方法?

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

最佳答案

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

例如:

当您第一次创建应用程序时,您有带有名字和姓氏的表 EMPLOYEE

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

基于SQLiteOpenHelper documentation :

Called when the database needs to be upgraded. The implementation should use this method to drop tables, add tables, or do anything else it needs to upgrade to the new schema version.

关于java - SQLite - Java - onCreate 和 onUpgrade - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39777452/

相关文章:

sql - 将sqlite数据库转换为sdf文件

c# - SQLite-Net Extensions - CreateTable 函数是否会改变我现有的表?

java - Netbeans:如何知道我当前正在查看什么 JAR

Java - 将 List<String> 拆分为...子列表?

android - android 原始文件存储在哪里?

android - 从操作栏转到 "up"时如何恢复 Activity 而不是重新启动

java - 如何加快Java(JDBC)中大量SQL更新的执行速度

java - Servlet 响应应该被缓存,但没有

java - 发送 key 时获取值

android - 变体调试没有类型为 INSTANT_RUN_MERGED_MANIFESTS 的输出