Para agregar una nueva columna a la tabla, debe usar ALTER
. En Android, puede agregar la nueva columna dentro de onUpgrade()
.
Quizás se pregunte, ¿cómo onUpgrade()
agregará la nueva columna?
Cuando implementas una subclase de SQLiteOpenHelper
, necesitas llamar al constructor de superclase: super(context, DB_NAME, null, 1);
en tu constructor de clases. Allí he pasado 1
por la versión.
Cuando cambié la versión 1
anterior ( 2
o superior), onUpgrade()
se invocará. Y realizar las modificaciones SQL que pretendo hacer. Mi constructor de clases después de cambiar la versión:
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, 2);//version changed from 1 to 2
}
Las modificaciones de SQL verifican como esta, el constructor de superclase compara la versión del archivo db SQLite almacenado con la versión a la que pasé super()
. Si estos números de versión (anteriores y actuales) son diferentes, onUpgrade()
se invoca.
El código debería verse así:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// add new columns to migrate to version 2
if (oldVersion < 2) {
db.execSQL("ALTER TABLE " + TABLE_NAME + "ADD COLUMN school VARCHAR(250)");
}
// add new columns to migrate to version 3
if (oldVersion < 3) {
db.execSQL("ALTER TABLE " + TABLE_NAME + "ADD COLUMN age INTEGER");
}
}