You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android SQLiteDatabase升级:添加列并迁移数据且新列留空的标准方法

Android SQLite添加列的标准升级方法

要给已有SQLite数据库添加一列并完成安全升级、保留原有数据,核心是借助SQLiteOpenHelper的onUpgrade方法,步骤如下:

  • 升级数据库版本号:将原来的DATABASE_VERSION常量值加1(比如从1改成2),触发框架的升级流程。
  • 在onUpgrade中执行ALTER TABLE语句:通过SQL的ALTER TABLE命令添加新列,默认设置为空值。语法示例:
    ALTER TABLE 你的表名 ADD COLUMN 新列名 列类型 DEFAULT NULL;
    
    不用写DEFAULT NULL也可以,SQLite中未指定默认值的列默认就是NULL。
  • 按版本递进处理升级:如果用户可能从多个旧版本升级(比如从版本1直接升到版本3),要依次判断旧版本号,逐个执行对应版本的升级操作,避免遗漏。

代码示例

public class MyDatabaseHelper extends SQLiteOpenHelper {
    private static final String DB_NAME = "my_database.db";
    // 版本号从1升级到2,触发onUpgrade
    private static final int DB_VERSION = 2;

    public MyDatabaseHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // 初始建表语句(原有列)
        db.execSQL("CREATE TABLE user (" +
                "id INTEGER PRIMARY KEY AUTOINCREMENT," +
                "username TEXT NOT NULL)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 仅当旧版本低于2时执行添加列操作
        if (oldVersion < 2) {
            // 添加新列"phone",默认值为空
            db.execSQL("ALTER TABLE user ADD COLUMN phone TEXT DEFAULT NULL");
        }
        // 后续版本升级可继续追加判断,比如:
        // if (oldVersion < 3) { ... }
    }
}

注意事项

  • 不要直接删除旧表重建,会导致原有数据丢失,ALTER TABLE是添加列的安全方式。
  • 若涉及复杂表结构变更(比如修改列类型、删除列),才需要用临时表迁移数据,但添加列这种场景用ALTER TABLE完全足够。
  • 测试时务必覆盖从旧版本数据库升级的场景,确认原有数据完整保留,新列值为空。

内容的提问来源于stack exchange,提问作者Abdullatif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 08:28:11