이전 '안드로이드 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를 실행하여서 새로운 테이블을 생성하도록 만든다.
- 이 때 주의할 점은 기존의 테이블은 삭제한 후 새로운 테이블은 만드는 것이므로 기존 테이블의 데이터는 다 삭제가 된다.
그러므로 기존의 데이터를 보존하고 싶다면 테이블을 삭제하기 전 데이터들을 저장하고, 테이블을 다시 만든 후 값들을 다시 저장해주면 된다.
'Android' 카테고리의 다른 글
안드로이드 난독화 (0) | 2019.05.14 |
---|---|
안드로이드 DB(데이터베이스) 추가, 삭제 (1) | 2019.04.29 |
안드로이드 DB(데이터베이스) 생성 (0) | 2019.04.21 |
안드로이드 리사이클러뷰(RecyclerView) 사용법 (2) (0) | 2019.04.14 |
안드로이드 리사이클러뷰(RecyclerView) 사용법 (1) (0) | 2019.04.14 |