본문 바로가기

Android/Basic

[Android] SQLiteOpenHelper

헬퍼클래스는 데이터베이스 버전을 지정하여 데이터베이스를 업그레이드할 때 알 수 있도록 도와준다. 그리고 현재 단말에 설치된 앱의 테이블이 새로 만들어지는지, 아니면 기존에 만들어져있던 테이블을 업그레이드해야 하는지를 알려준다.

헬퍼클래스는 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() 호출됨.");
}
}


출처 : 부스트코스 강의