【问题标题】:Creating new Table on updating existing app在更新现有应用程序时创建新表
【发布时间】:2013-08-22 09:14:29
【问题描述】:

我有一个已经发布到谷歌游戏商店的工作应用程序。我在我的应用程序中使用 sqllite 数据库来存储数据。我遇到以下问题。

  1. 目前我的应用程序版本为 1.1,它只有一个表。我在数据助手类的 onCreate() 方法中创建的。

  2. 在更新 1.2 中,我在我的数据库中添加了一个表,该表是在 onUpgrade() 方法中创建的。喜欢关注

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    {
      db.execSQL(ShortCode.TABLE_CREATE_STATEMENT);
      onCreate(db);
    }
    

如果用户以前在他的手机中安装了 1.1 并且他更新到 1.2,那么现在我有什么观察者,这两个表都是在用户中创建的,用户可以毫无问题地使用应用程序。 但如果用户安装新副本或直接 1.2 应用程序崩溃。可以做些什么来避免这种情况。任何帮助将不胜感激。提前致谢。

【问题讨论】:

    标签: android sqlite sql-update android-sqlite updates


    【解决方案1】:

    在 onUpgrade 方法中,您需要删除现有表以备份数据。然后在 onCreate 中,您需要同时创建表并插入旧数据(如果有)......

    【讨论】:

      【解决方案2】:

      onCreate 用于新安装的应用程序(或用户删除了您应用程序的数据之后)。
      onUpgrade 用于您的应用程序更新时,即当某些旧版本的数据已经存在时设备。

      1.2 应用程序的onCreate 方法必须创建该版本所需的所有表。

      【讨论】:

      • 我已经在我的应用程序中完成了这项工作。但这是唯一的解决方案吗?如果是这样,那么实施 onUpgrade() 有什么好处?
      【解决方案3】:

      `@Override 公共无效 onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){ db.execSQL("如果存在则删除表" + TABLE_Old1_TABLE); db.execSQL("如果存在则删除表" + TABLE_Old2_TABLE); onCreate(db); }

      然后在你的 onCreate() 方法中创建一个像这样的新表-

      `String CREATE_New_Table = "CREATE TABLE IF NOT EXISTS " + TABLE_New_TABLE + "(" + KEY_ID
                  + " INTEGER PRIMARY KEY," + Id + " TEXT, " + Address + " TEXT, " + AppName + " TEXT " + ")";
          db.execSQL(CREATE_Village_Table);`
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-26
        • 2016-01-04
        • 2020-12-14
        相关资源
        最近更新 更多