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
相关产品推荐
相关产品推荐

