헬퍼클래스는 데이터베이스 버전을 지정하여 데이터베이스를 업그레이드할 때 알 수 있도록 도와준다. 그리고 현재 단말에 설치된 앱의 테이블이 새로 만들어지는지, 아니면 기존에 만들어져있던 테이블을 업그레이드해야 하는지를 알려준다.
헬퍼클래스는 SQLiteOpenHelper를 상속받아 구현할 수 있다.
SQLiteOpenHelper를 상속받으면, 기본 생성자와 메소드 2가지를 오버라이드해야한다.
class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
}
}
}
* onCreate() : 기존에 만들어진 데이터베이스가 없을 경우 호출. 데이터베이스가 처음 만들어질 때 호출되므로 데이터베이스 테이블을 초기화(생성)하는 SQL문을 넣어주면 된다.
* onUpgrade() : 기존에 만들어진 데이터베이스가 있을 경우 호출. 테이블이 변경되어야하는 등 단말에 저장된 데이터베이스의 구조가 바뀌어야 하는 경우에 사용할 수 있다. 이 안에는 테이블을 변경하기 위한 ALTER 문 등을 넣을 수 있으며, 필요한 경우에는 이미 저장된 데이터를 다른곳에 복사했다가 새로 테이블을 만들고 그 테이블을 넣어주는 방식으로 처리하기도 한다.
* onOpen() : 버전에 상관없이 데이터베이스를 오픈해주는 메서드. 데이터베이스를 오픈하면 자동으로 호출. (위 두개의 메소드가 호출된 뒤에 마지막으로 호출됨)
class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
println("onCreate() 호출됨.");
String tableName = "customer";
String sql = "create table if not exists " + tableName + "("
+ "_id integer PRIMARY KEY autoincrement,"
+ "name text,"
+ "age integer, "
+ "phone text);";
sqLiteDatabase.execSQL(sql);
println("테이블 생성됨.");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
println("onUpgrade() 호출됨 : " + oldVersion + ", " + newVersion);
if(newVersion > 1){
String tableName = "customer";
sqLiteDatabase.execSQL("drop table if exists "+tableName);
println("테이블 삭제함.");
String sql = "create table if not exists " + tableName + "("
+ "_id integer PRIMARY KEY autoincrement,"
+ "name text,"
+ "age integer, "
+ "phone text);";
sqLiteDatabase.execSQL(sql);
println("테이블 새로 생성됨.");
}
}
@Override
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
println("onOpen() 호출됨.");
}
}
출처 : 부스트코스 강의
'Android > Basic' 카테고리의 다른 글
[Android] 카메라로 사진 촬영하기 (2) | 2018.08.27 |
---|---|
[Android] 인터넷 연결상태 체크하기 (0) | 2018.07.31 |
[Android] 웹에서 Image 다운로드 (0) | 2018.07.09 |
[Android] Gson을 이용한 JSON 변환 (0) | 2018.07.07 |
[Android] Volley 라이브러리를 활용한 서버 통신 (0) | 2018.07.07 |