본 글은 [깡샘의 안드로이드 프로그래밍 - 루비페이퍼] 의 내용을 발췌한 것입니다.
좀더 자세한 내용은 책을 통해 확인해 주세요.
8장. DBMS을 이용한 데이터 영속화
8.1.1. SQLiteDatabase 클래스
안드로이드에서 데이터베이스 프로그램의 핵심 클래스는 SQLiteDatabase입니다.
데이터베이스에 데이터를 저장하고 가져오고 수정, 삭제하는 모든 SQL 질의문은 SQLiteDatabase 클래스의 함수를 이용하여 수행합니다.
이러한 작업을 수행하려면 우선 다음 구문으로 SQLiteDatabase 객체를 얻어야 합니다.
SQLiteDatabase db=openOrCreateDatabase("memodb", MODE_PRIVATE, null);
SQLiteDatabase 객체를 얻으려면 openOrCreateDatabase ( ) 함수를 이용합니다.
이 함수의 첫 번째 매개변수는 개발자가 지정하는 데이터베이스 파일명입니다.
이렇게 얻은 SQLiteDatabase 객체의 함수를 이용해 SQL 문을 수행합니다.
- execSQL(String sql): insert, update 등 select 문이 아닌 나머지 SQL 수행
- rawQuery(String sql, String[] selectionArgs, Object[] bindArgs): select SQL 수행
데이터베이스에 데이터를 저장하려면 insert 문을 사용합니다. execSQL ( ) 함수로 insert 문을 수행하는 예는 다음과 같습니다.
db.execSQL("insert into tb_memo (title, content) values (?,?)", new String[]{title, content});
execSQL( ) 함수에서 큰따옴표로 묶인 첫 번째 매개변수가 SQL 문입니다.
만약 이곳에서 데이터 부분(values)을 ?로 작성했다면, 두 번째 매개변수에서 각각의 ?에 대응하는 데이터를 지정합니다.
위의 예에서는 ?가 두 개이므로 문자열 두 개를 가지는 배열을 적용했습니다. 첫 번재 데이터가 첫 번째 ? 부분에 적용됩니다.
데이터베이스에 저장된 데이터를 찾아서 가져오려면 select 문을 사용합니다. 이때는 rawQuery( ) 함수를 이용합니다.
Cursor cursor= db.rawQuery("select title, content from tb_memo order by _id desc limit 1", null);
SQL 문에 ? 표현이 없어 두 번째 매개변수 부분이 null입니다. rawQuery( ) 함수의 결괏값은 Cursor 객체입니다.
Cursor는 선택된 행(row)의 집합 객체 정도로 이해하면 됩니다.
여기서 각 열(column) 에 해당하는 데이터를 획득하려면 Cursor 객체를 이용해 행을 선택하고 선택된 행의 열 데이터를 획득하는 구조입니다. Cursor의 행을 선택하는 함수는 다음과 같습니다. 이 함수로 행을 선택하지 않은 상태에서 열 데이터를 추출할 수는 없습니다.
- moveToNext(): 순서상으로 다음 행 선택
- moveToFirst(): 가장 첫 번째 행 선택
- moveToLast(): 가장 마지막 행 선택
- moveToPrevious(): 순서상으로 이전 행 선택
moveToNext( ) 함수를 이용하여 행을 선택하고, 선택된 행의 getString ( ) 함수를 이용하여 열 데이터를 가져오는 예입니다.
이때 getString ( ) 함수의 매개변수는 몇 번째 열의 데이터를 가져오는지 지정합니다.
예를 들어, getString (0)이면 첫 번째 열의 데이터를 가져옵니다.
while (cursor.moveToNext()){
titleView.setText(cursor.getString(0));
contentview.setText(cursor.getString(1));
}
'Android' 카테고리의 다른 글
[깡샘의 안드로이드 프로그래밍] 정리 12 - Custom Adapter (0) | 2018.01.05 |
---|---|
[깡샘의 안드로이드 프로그래밍] 정리 11 - SharedPreference (0) | 2018.01.05 |
[깡샘의 안드로이드 프로그래밍] 정리 9 - DisplayMetrics (0) | 2018.01.05 |
[깡샘의 안드로이드 프로그래밍] 정리 8 - 이벤트 처리 (0) | 2018.01.05 |
[깡샘의 안드로이드 프로그래밍] 정리 7 - Vibration (0) | 2018.01.05 |