안드로이드 데이터베이스 다루기 SQLiteOpenHelper 사용

프로그래밍/Android 2013. 8. 27. 11:30


안드로이드 데이터베이스 다루기 SQLiteOpenHelper 사용


참고 : 

http://developer.android.com/training/basics/data-storage/databases.html


테이블 정보를 갖는 클래스 생성

public final class FeedReaderContract{

public FeedReaderContract(){}

// inner class 를 사용해서 entry 테이블에 대한 정보를 상수로 정의한다.

public static abstract class FeedEntry implements BaseColumns { // BaseColumns 는 _COUNT, _ID 를 제공한다.

public static final String TABLE_NAME = "entry";

public static final String COLUMN_NAME_ENTRY_ID = "entryid";

public static final String COLUMN_NAME_TITLE = "title";

public static final String COLUMN_NAME_SUBTITLE = "subtitle";

...

}

}



테이블 생성하기

private static final String TEXT_TYPE = " TEXT";

private static final String COMMA_SEP = ",";

// 테이블 생성을 위한 CREATE TABLE SQL

private static final String SQL_CREATE_ENTRIES =

"CREATE TABLE " + FeedEntry.TABLE_NAME + " (" +

FeedEntry._ID + " INTEGER PRIMARY KEY, " +

FeedEntry.COLUMN_NAME_ENTRY_ID + TEXT_TYPE + COMMA_SEP +

FeedEntry.COLUMN_NAME_TITLE + TEXT_TYPE + COMMA_SEP +

...

" )";

// 테이블 삭제를 위한 DROP TABLE SQL

private static final String SQL_DELETE_ENTRIES = 

"DROP TABLE IF EXISTS " + FeedEntry.TABLE_NAME;

public class FeedReaderDbHelper extends SQLiteOpenHelper{

public static final int DATABASE_VERSION = 1;

public static final String DATABASE_NAME = "FeedReader.db";

public FeedReaderDbHelper( Context context){

super( context, DATABASE_NAME, null, DATABASE_VERSION));

}

// 데이터베이스가 최초 생성될 때 실행된다.  

// 이 클래스의 경우 FeedReader.db 가 생성될 때 딱 한번 호출된다. 테이블 생성이나 initail data 를 추가할 때 사용된다.

@Override

public void onCreate( SQLiteDatabase db){ // 여기서 이 메소드를 통해서 테이블이 생성됩니다.

db.execSQL( SQL_CREATE_ENTRIES);

}

// 데이터베이스가 업그레이드가 필요할때 실행된다.

@Override

public void onUpgrade( SQLiteDatabase db. int oldVersion, int newVersion){

db.execSQL( SQL_DELETE_ENTRIES);

onCreate( db);

}

// 데이터베이스가 다운그레이드가 필요할 때 실행된다.

@Override

public void onDowngrade( SQLiteDatabase db, int oldVersion, int newVersion){

onUpgrade( db, oldVersion, newVersion);

}

}



테이블에 데이터 추가하기

FeedReaderDbHelper mDbHelper = new FeedReaderDbHelper( getContext());

// 데이터베이스를 쓰기 모드로 가져온다.

SQLiteDatabase db = mDbHelper.getWritableDatabase();


// 데이터 준비

ContentValues values = new ContentValues();

values.put( FeedEntry.COLUMN_NAME_ENTRY_ID, id);

values.put( FeedEntry.COLUMN_NAME_TITLE, title);

values.put( FeedEntry.COLUMN_NAME_CONTENT, content);


// 데이터 추가

long newRowId = db.insert(

FeedEntry.TABLE_NAME, // 테이블 이름

FeedEntry.COLUMN_NAME_NULLABLE, // 데이터가 준비되지 않은 컬럼에 null 이 입력될 수 있다는 의미

values

);



데이터 읽기

SQLLiteDatabase db = mDbHelper.getReadableDatabase();


// 데이터를 가져올 컬럼 정의

String[] projection = {

FeedEntry._ID,

FeedEntry.COLUMN_NAME_TITLE,

FeedEntry.COLUMN_NAME_UPDATED,

...

};


String sortOrder = FeedEntry.COLUMN_NAME_UPDATED + " DESC";


Cursor cursor = db.query(

FeedEntry.TABLE_NAME, // 테이블 이름

projection, // 컬럼

selection // WHERE 절의 컬럼

selectionArgs, // WHERE 절의 컬럼 값

null, // row를 그룹화하지 않도록

null, // 그룹화한 row 를 필터 하지 않도록

sortOrder // ORDER BY 절

);


while(cursor.moveToNext()){

long itemId = cursor.getLong( cursor.getColumnIndexOrThrow( FeedEntry._ID));

...

}



데이터 삭제하기

// WHERE 절 정의

String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + " LIKE ?";

String[] selectionArgs = { String.valueOf( rowId)}; // 위 selection 의 ? 에 매핑될 데이터

db.delete( table_name, selection, selectionArgs);



데이터 수정하기

SQLiteDatabase db = mDbHelper.getReadableDatabase();


ContentValues values = new ContentValues();

values.put( FeedEntry.COLUMN_NAME_TITLE, title);


String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + " LIKE ?";

String[] selectionArgs = { String.valueOf( rowId)}; // 위 selection 의 ? 에 매핑될 데이터


int count = db.update(

FeedReaderDbHelper.FeedEntry.TABLE_NAME,

values,

selection,

selectionArgs

);




: