Mission Completed

Android with SQLite 본문

개발/Android 개발

Android with SQLite

삼지안☆ 2013. 6. 26. 11:41

안드로이드폰이나 아이폰에는 SQLite3 이라는 소프트웨어가 설치되어있다.

이것을 사용하기 위해서 자바 클래스 하나를 생성하여 SQLiteOpenHelper 로 순수상속(extends) 받는다.

받고 나서는 생성자를 재정의 하라고 강요받는다. 거기에는 두개의 생성자가 있느데 하나는 3개의 파라미터를 받고 하나는 4개의 파라미터를 받는다.


공통되는 파라미터 변수형은 Context, String, CursorFactory, int 이고 추가되는 네번째는 DatabaseErrorHandler이다.

DatabaseErrorHandler는 이벤트 핸들러의 일종이라 사용자에게 알림창을 띄우고 개발자에게 연락하라는 말을 전달 할 수 있을 뿐이니, 패스한다.

	 /**
	 * 기본 생성자
	 * @param context	이 클래스의 객체를 생성하는 Activity, this 라고 주면 된다.
	 * @param name		DB 이름 
	 * @param factory	SELECT할 때 사용, null을 주면 된다.
	 * @param version	DB에 대한 버젼 값
	 */
	private DBHelper(Context context, String name, CursorFactory factory,
			int version) {
		super(context, name, factory, version);
	}
	
	/**
	 * 직접 재정의된 생성자
	 * 매번 바뀌게 되는 context 만 받아와 생성하도록 만든 생성자.
	 * @param context 이 클래스의 객체를 생성하는 Activity
	 */
	public DBHelper(Context context) {
		this(context, DB_NAME, null, DB_VERSION);
	}

생성자를 재정의 하고 나면 onCreate() 와 onUpgrade()를 재정의 해야한다.


필자는 자동 재정의된 생성자를 private으로 바꾼 후, 새로 재정의 했다. 이유는 String name, CursorFactory factory, int version는 변경될 일이 없기 때문에 Context context만 받아와 생성할 수 있도록 하는 생성자이다. 그리고 private static final 로 DB이름과 DB버전을 정의 하여 사용했다.


객체가 최초로 실행 되어 질 때, 정의한 DB 이름(이후 DBName)의 파일이 생성되는데 이것이 CREATE DATABASE구문 역할을 한다.

DBName이라는 이름의 파일이 처음으로 생성되고 나면, 이 클래스의 onCreate()가 자동으로 실행된다.

이 onCreate()는 DB가 처음 생성되어질 때에만 실행이 되므로, DB이름을 변경하지 않는 이상 두번 다시 실행 되지 않는다.

이 메소드는 CRATE TABLE구문 역할을 해주는데 이것은 직접 수행해 주어야 한다.

	 /**
	 * DB가 생성된 직후, 자동으로 수행되는 메소드.
	 * 이 안에서 필요한 테이블들을 생성해야 한다.
	 * 주의!! 이 메소드는 최초 수행된 후에는 DB이름이 변겨오디지 않는 한,
	 * 두번 다시 실행 되지 않는다.
	 * --> CREATE TABLE을 직접 수행해 주어야 함.
	 */
	 @Override
	 public void onCreate(SQLiteDatabase db) {
	 	 Log.w("DBHelper", "****************onCreate() 시작됨****************");
	 	 String sql = "CREATE TABLE IF NOT EXISTS MY_TABLE (" +
	 	 	 "NUM INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " +
	 	 	 "MEMO TEXT NOT NULL)";
	 	 db.execSQL(sql);
	 	 Log.w("DBHelper", "****************onCreate() 종료됨****************");
	 }

DB는 놔두고 테이블 구조를 바꾼다거나 새로운 테이블을 추가 해야할 때에는 onUpgrade() 를 사용하면 되는데, 이것은 다음번에 다루기로 한다.

'개발 > Android 개발' 카테고리의 다른 글

Android Google맵 필기자료  (0) 2013.07.05
Android ImageDownloader  (0) 2013.06.28
asynctask - Android XML thread  (0) 2013.06.27
Activity Life Cycle  (0) 2013.06.24
Android Log 찍는 법  (0) 2013.06.05