안드로이드 데이터베이스 다루기 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
);
'프로그래밍 > Android' 카테고리의 다른 글
안드로이드 테마 설정하기 (0) | 2013.08.27 |
---|---|
안드로이드 key-value 데이터 다루기 Preferences (0) | 2013.08.27 |
안드로이드 인텐트 필터 (0) | 2013.08.26 |
안드로이드 리소스와 에셋 (0) | 2013.08.26 |
안드로이드 레이아웃 (0) | 2013.08.25 |