2011. 12. 15. 10:58

안드로이드(Android) DB SQLite 사용하기

안드로이드에서는 DB 사용이 상대적으로 간편하게 되어 있습니다. 별도의 DB S/W를 쓰거나 연결 툴을 이용할 필요없이 자체 내장되어 있는 SQLite를 이용해서 데이터를 관리하는데 먼저 DB와 Table을 만들려면 아래와 같이 합니다.

public class 클래스명 extends SQLiteOpenHelper {
 public 클래스명(Context context) {
  super(context, "DB명", null, 1) ;
 }
 @Override
 public void onCreate(SQLiteDatabase db) {
  // TODO Auto-generated method stub
  db.execSQL("CREATE TABLE 테이블명(_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
             "필드명 데이터형, 필드명 데이터형, . . . . ) ;") ;
 }
 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  // TODO Auto-generated method stub
  db.execSQL("DROP TABLE IF EXISTS 테이블명") ;
  onCreate(db) ;
 }
}

테이블을 만드는 메써드는 execSQL() 이고, SQLite에서 데이터형은 크게 Text, Integer, Real, Blob 등이 있습니다. 해보지는 않았지만 Text를 Varchar로 해도 되는 것 같더군요. int 타입은 되는 걸 확인했습니다. 그리고, `_id`는 안드로이드에서 '시퀀스(Sequence)'를 지정하는 하나의 약속입니다. primary key이므로 이걸 유일한 식별자로 사용해서 데이터 처리를 하면 됩니다. autoincrement를 지정하면 값이 하나씩 순차적으로 올라가는데 이건 MySQL과 같습니다.

이제 DB에 접근해서 Table에 데이터를 입력하거나 검색조회, 수정, 삭제를 다음과 같이 합니다. 각각의 처리를 하는 메써드가 있지만 이것보다 직접 SQL문을 사용하는 것을 적극 권장합니다. '변수값'과 변수값의 차이는 문자열과 수치 데이타를 뜻합니다. 조건값도 마찬가지입니다.

<DB명> DBHelper ;
SQLiteDatabase db ;
DBHelper = new DB명(this) ;
db = DBHelper.getWritableDatabase() ;   
db.execSQL("INSERT INTO 테이블명 VALUES(null, '변수값', 변수값...);") ;
db.execSQL("UPDATE 테이블명 SET 필드명 = 바꿀값 WHERE 필드명 = 조건값 ;") ;
db.execSQL("DELETE FROM 테이블명 WHERE 필드명 = 조건값 ;") ;
DBHelper.close();
Cursor cursor ;  
db = DBHelper.getReadableDatabase() ; 
cursor = db.rawQuery("SELECT * FROM <테이블명>", null);
DBHelper.close();

주의할 점 두 가지를 덧붙이자면 UPDATE와 DELETE를 할 때는 반드시(!) WHERE절을 써서 조건을 정해줘야 합니다. 안 그러면 모든 데이터가 영향을 받아 다 수정되거나 삭제됩니다. 무서워요~! 다른 하나는 DB에 접근해서 데이터를 처리했으면 또 반드시(!) close()해서 닫아줘야 됩니다. 안 그러면 또 예상치 못한 결과를 볼 수 있으니 ㅜ.ㅜ