Для добавления нового столбца в таблицу необходимо использовать ALTER
. В Android вы можете добавить новый столбец внутри onUpgrade()
.
Вам может быть интересно, как onUpgrade()
добавит новый столбец?
Когда вы реализуете подкласс SQLiteOpenHelper
, вам нужно вызвать конструктор суперкласса: super(context, DB_NAME, null, 1);
в конструкторе вашего класса. Там я прошел 1
для версии.
Когда я изменил версию 1
на выше (2
или выше), будет вызвано onUpgrade()
. И выполнить модификации SQL, которые я намерен сделать.
Мой конструктор класса после изменения версии:
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, 2);//version changed from 1 to 2
}
Проверка модификаций SQL выполняется следующим образом: конструктор суперкласса сравнивает версию сохраненного файла базы данных SQLite с версией, которую я передал super()
. Если эти (предыдущие и сейчас) номера версий отличаются, вызывается onUpgrade()
.
Код должен выглядеть так:
@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");
}
}