【问题标题】:How can I add new columns to a SQLite database after the Android app is released?Android 应用发布后,如何向 SQLite 数据库添加新列?
【发布时间】:2018-06-01 09:41:40
【问题描述】:

我想向 SQLite 数据库添加新列,但我已经在 Play 商店上发布了我的应用,因此,如果我对其进行编辑,用户需要卸载并重新安装该应用, 但我不希望那样。请帮忙,我是 Android 新手。

【问题讨论】:

  • 查找 sqlite 迁移。您可以在保留数据的同时更新表结构。如果您必须移动数据,可能会很困难。
  • 如果我的回答有用,如果您能接受,我将不胜感激。谢谢。

标签: android google-play android-sqlite


【解决方案1】:

(1) 增加(或简单地更改)您的数据库版本
(2) 会导致onUpgrade()方法调用
(3) 在onUpgrade() 方法中执行您的查询(用于添加新列)。

提到了正确的做法here in this blog。

有时用户可能会从 1.1 版本更新到 1.5 版本。换句话说,他们可能会跳过 1.1 到 1.5 之间的其他版本。您可能会在 1.1 到 1.5 之间更改数据库几次。因此,为了让用户从所有数据库更改中受益,您需要采用如下 onUpgrade() 方法。

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
   if (oldVersion < 2) {
        db.execSQL(DATABASE_ALTER_TEAM_1);
   }
   if (oldVersion < 3) {
        db.execSQL(DATABASE_ALTER_TEAM_2);
   }
 }

希望对你有帮助。

【讨论】:

  • 谢谢,但我有另一个表,我必须在 onupgrade 方法中为该表编写任何内容
  • 由于您没有提到表格和所有内容,这是一个与您的问题完全匹配的通用答案。您只需根据 onUpgrade() 方法中的要求替换您的查询。我还提到了一个做同样事情的博客。
  • 没有得到你的问题。您想将列添加到现有表中吗?为此,您无需在 onUpgrade 中再次编写 onCreate。只需使用 onUPgrade 中的查询来更新您的表 - ALTER TABLE your_table_name ADD COLUMN your_new_column_name TEXT - 我只是考虑了新的列类型 TEXT。你应该根据你的要求改变它。
  • 您正在接收 SQLiteDatabase 实例 (db),所以只需写下这一行 - db.execSQL("ALTER TABLE your_table_name ADD COLUMN your_new_column_name TEXT)
  • 感谢您的回复,兄弟,我的问题是我的数据库中有四个表,我只想在一个表中添加三个列
【解决方案2】:

您需要更改数据库类的以下方法

@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。
  • 做一件事卸载应用程序并重新安装。然后在android studio push db文件中打开设备文件资源管理器选项菜单并匹配列名
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多