[android] 안드로이드에서 SQLite 데이터베이스 마이그레이션
안드로이드 앱을 개발하다 보면 데이터베이스 스키마를 변경해야 할 때가 있습니다. 이럴 때 데이터베이스 마이그레이션은 필수적입니다.
SQLiteOpenHelper를 사용한 데이터베이스 마이그레이션
SQLiteOpenHelper를 사용하여 데이터베이스를 관리할 때, 데이터베이스 스키마의 변경이 필요한 경우 onUpgrade
메서드를 사용하여 마이그레이션을 수행할 수 있습니다.
아래는 SQLiteOpenHelper를 사용하여 데이터베이스 마이그레이션을 수행하는 간단한 예제 코드입니다.
public class MyDatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "mydatabase.db";
private static final int DATABASE_VERSION = 2;
public MyDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// Initial database creation
db.execSQL("CREATE TABLE mytable (_id INTEGER PRIMARY KEY, name TEXT)");
// More tables and initial data setup
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Database schema upgrade logic
if (oldVersion < 2) {
db.execSQL("ALTER TABLE mytable ADD COLUMN age INTEGER");
}
// More upgrade tasks for other versions
}
}
위의 코드에서 onUpgrade
메서드 안에 데이터베이스 스키마 변경에 관한 로직을 추가할 수 있습니다.
Room 라이브러리를 사용한 데이터베이스 마이그레이션
Room 라이브러리를 사용하는 경우에는 Migration
객체를 사용하여 데이터베이스 마이그레이션을 수행할 수 있습니다.
다음은 Room 라이브러리를 사용하여 데이터베이스 마이그레이션을 수행하는 예제 코드입니다.
@Database(entities = {MyEntity.class}, version = 2)
public abstract class MyDatabase extends RoomDatabase {
public abstract MyDao myDao();
}
public class MainActivity extends AppCompatActivity {
private MyDatabase myDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myDatabase = Room.databaseBuilder(getApplicationContext(), MyDatabase.class, "mydatabase.db")
.addMigrations(MIGRATION_1_2, MIGRATION_2_3)
.build();
}
static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
// Migration logic from version 1 to 2
database.execSQL("ALTER TABLE myentity ADD COLUMN age INTEGER");
}
};
static final Migration MIGRATION_2_3 = new Migration(2, 3) {
@Override
public void migrate(SupportSQLiteDatabase database) {
// Migration logic from version 2 to 3
}
};
}
위의 코드에서 Migration
객체를 사용하여 각각의 버전 간에 수행해야 할 마이그레이션 로직을 정의할 수 있습니다.
안드로이드에서는 SQLite 데이터베이스를 안정적으로 관리하고 버전을 업데이트할 때 데이터베이스 마이그레이션을 수행할 수 있는 다양한 방법을 제공합니다.
데이터베이스 마이그레이션은 안정적인 데이터 관리와 앱의 성능 향상을 위해 중요합니다. 적절한 마이그레이션 전략을 선택하여 데이터베이스를 유연하게 관리하는 것이 중요합니다.