【问题标题】:Android SQLite database and app updateAndroid SQLite 数据库和应用更新
【发布时间】:2013-05-29 06:02:35
【问题描述】:

我开发了一个安卓应用并发布了 1.0 版。该应用程序包含带有 5 个表的 SQLite 本地数据库。

现在我们计划发布 2.0 版本同时更新 1.0 版本的用户。在 2.0 版中,我们在之前的 5 个表中增加了两个表,现在是 7 个表。

现在我的问题是,1.0版本的用户在本地数据库中都有一些数据,如果他更新到2.0版本,之前的数据会丢失吗?如果是这样。那么替代方法是什么?

【问题讨论】:

  • 如果改变DB架构,旧的DB就不能保留了
  • @thepoosh 感谢您的回复。如果我没有更改数据库架构,而是使用新功能更新了版本。在那种情况下?
  • 尝试阅读这个答案:stackoverflow.com/a/8627242/1056359

标签: android sqlite android-contentprovider android-sqlite


【解决方案1】:

您可以在SQLiteOpenHelper#onUpgrade 上做一些事情,获取一些旧数据。并插入新表

【讨论】:

    【解决方案2】:

    您应该将所有更改放在您可以使用此代码的 onUpgrade 方法中:

    @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        String sql = "ALTER TABLE " + TABLE_SECRET + " ADD COLUMN " +
         "name_of_column_to_be_added" + " INTEGER";
        db.execSQL(sql);        
    }        
    

    这会在您当前的数据库中添加一列。您的数据库不会丢失数据。提醒:在执行 getWriteableDatabase 或 getReadableDatabase 并且您的数据库版本与旧版本不同时,将调用 onUpgrade。

    【讨论】:

    • 澄清一下,TABLE_SECRET 是表名。
    【解决方案3】:

    更改您的数据库版本并在您的onUpgrade(SQLiteDatabase db, int oldVersion, int newVesion) 方法中添加额外的两个表创建方法。现在以前的数据不会丢失。

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多