반응형

이미 플레이스토어에 앱을 배포하여 많은 유저가 사용하고 있는 경우 데이터베이스의 테이블 구조가 변경되어야 한다면 어떻게 해야 할까요?  

새로 앱을 설치하는 단말의 경우에는 새로 테이블을 만들면 되지만 이미 사용하고 있는 상태에서는 테이블을 이미 만들어두었기 때문에 테이블을 삭제하고 다시 만들도록 하기는 어렵습니다.

이 때 사용할 수 있는 것이 헬퍼 클래스입니다.

헬퍼 클래스는 데이터베이스의 생성, 오픈, 업그레이드, 다운드레이를 할때 유용합니다.

헬퍼 클래스를 만드는 방법에 대해 알아봅시다.



헬퍼 클래스

헬퍼 클래스는 데이터베이스 버전을 지정하여 데이터베이스를 업그레이드할 때 알 수 있도록 합니다.

그리고 현재 단말에 설치된 앱의 테이블이 새로 만들어지는지 아니면 업그레이드되어야 하는지를 알려줍니다.

헬퍼 클래스는 SQLiteOpenHelper라는 것을 이용해 만듭니다.

public SQLiteOpenHelper (Context context, String name, 
			 SQLiteDatabase.CursorFactory factory, int version)

이 클래스 안에는 세 개의 메소드가 있는데 데이터베이스의 상태에서 따라 자동으로 호출됩니다.

즉, 새로 데이터베이스가 만들어지는 경우에는 onCreate 메소드가 호출되며 업그레이드가 필요한 경우에는 onUpgrade 메소드가 호출됩니다.

public abstract void onCreate (SQLiteDatabase db)
public abstract void onOpen (SQLiteDatabase db)
public abstract void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion)

헬퍼 클래스를 이용하는 전형적인 구조는 다음과 같습니다.

헬퍼 클래스 상속하여 정의하기

SQLiteOpenHelper 클래스를 상속하여 새로운 클래스를 정의하면 데이터베이스를 관리하는 코드를 하나의 클래스 안에서 처리 할 수 있습니다.

private class DatabaseHelper extends SQLiteOpenHelper {

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

onCreate 메소드는 데이터베이스가 처음 만들어지는 경우에 호출되므로 데이터베이스를 초기화(생성) 하는 SQL을 넣어줍니다.

public void onCreate(SQLiteDatabase db) {
    println(“creating table [+ TABLE_NAME +].);
 	
    String CREATE_SQL = “create table “ + TABLE_NAME +(+ “ _id integer PRIMARY KEY autoincrement,+ “ name text,+ “ age integer,+ “ phone text);
    try {
      db.execSQL(CREATE_SQL);
    } catch(Exception ex) {
      Log.e(TAG, “Exception in CREATE_SQL“, ex);
    }

onUpgrade 메소드는 테이블이 변경되어야 하는 등 단말에 저장된 데이터베이스의 구조가 바뀌어야 하는 경우에 사용할 수 있습니다.

이 안에는 테이블을 변경하기 위한 ALTER 문 등을 넣을 수 있으며 필요한 경우에는 이미 저장되어 있는 데이터를 다른 곳에 복사했다가 새로 테이블을 만들고 그 테이블에 넣어주는 방식으로 처리하기도 합니다.

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.w(TAG, “Upgrading database from version “ + oldVersion + 
        “ to “ + newVersion +.);

    if (newVersion > 1) {
        db.execSQL(“DROP TABLE IF EXISTS “ + TABLE_NAME);
    }



반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기