이전 '안드로이드 DB(데이터베이스) 생성'

2019/04/21 - [Android] - 안드로이드 DB(데이터베이스) 생성

 

글에서 SQLiteOpenHelper를 상속받는 클래스 속 onUpgrade() 메소드의 관하여 알아보겠다.

 

 

 

 

/* DBHelper.java */

package com.tistory.godog.dbtest;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper extends SQLiteOpenHelper {

    static final String DATABASE_NAME = "test.db";
    //static final int DATABASE_VERSION = 2;

    public DBHelper(Context context, int version) {
        super(context, DATABASE_NAME, null, version);
    }
/*
    public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }
*/

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE tableName ( name TEXT, info TEXT);");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS tableName");
        onCreate(db);
    }

}

 

- onUpgrade()는 생성자에서 버전을 업그레이드하면 실행된다.

 

 

- 버전을 높일 때는 보통 db에 새로운 열 테이블을 추가하거나 변경 사항이 있을 때이므로 기존의 테이블은 삭제해준 후 다시 생성하여야 한다.

 

 

ex) 만약 위 프로그램을 한번 실행한 후 db파일이 생성되었으면 그 후 다시 실행하였을 때는 db파일이 있으므로 onCreate가 실행되지 않는다. 

 그러므로 한번 실행 후 onCreate에서 INTEGER인 열을 하나 추가하고 다시 실행하여도 테이블은 변하지 않는다.

 하지만 이 때 버전을 더 높은값(업그레이드)을 준다면 다시 onUpgrade가 실행되어 기존의 테이블을 지운 후 onCreate를 실행하여서 새로운 테이블을 생성하도록 만든다.

 

 

- 이 때 주의할 점은 기존의 테이블은 삭제한 후 새로운 테이블은 만드는 것이므로 기존 테이블의 데이터는 다 삭제가 된다.

 그러므로 기존의 데이터를 보존하고 싶다면 테이블을 삭제하기 전 데이터들을 저장하고, 테이블을 다시 만든 후 값들을 다시 저장해주면 된다.

 

 

 

 

+ Recent posts