ContentValues란?
ContentValues 클래스는 Android에서 데이터베이스와 연동할 때 사용되는 데이터 집합을 저장하기 위한 유용한 도구입니다. 주로 ContentResolver와 함께 사용되며, ContentResolver는 앱과 ContentProvider 간의 중개자 역할을 합니다. 즉, ContentValues는 ContentResolver와 ContentProvider가 데이터를 주고받는 데 필요한 “데이터 운송 수단”이라고 이해할 수 있습니다.
ContentValues 사용 순서
- ContentValues 객체 생성
ContentValues 객체를 생성하여 데이터를 담을 준비를 합니다.
ContentValues addRowValue = new ContentValues();
- 데이터 입력
put() 메서드를 사용하여 (키, 값) 쌍으로 데이터를 입력합니다. 이 데이터는 DB 테이블의 컬럼 이름과 값에 해당합니다.
addRowValue.put("number", "200106054");
addRowValue.put("name", "홍길동");
addRowValue.put("department", "컴퓨터");
addRowValue.put("age", "18");
addRowValue.put("grade", 3);
- ContentResolver 가져오기
getContentResolver()
메서드를 통해 ContentResolver 객체를 가져옵니다.
ContentResolver resolver = getContentResolver();
- 데이터 삽입
ContentResolver.insert()
메서드에 URI와 ContentValues 객체를 전달하여 데이터베이스에 데이터를 삽입합니다.resolver.insert(Uri.parse(PROVIDER_URI), addRowValue);
ContentResolver와 DBManager의 역할
ContentResolver
ContentResolver
는 앱의 ContentProvider
와 상호작용하여 데이터를 전달하거나 가져오는 역할을 합니다.
insert()
메서드 호출 시 ContentValues
객체를 ContentProvider
로 전달합니다.
예제:
@Override
public Uri insert(Uri uri, ContentValues values) {
long rowId = dbManager.insert(values); // ContentValues를 dbManager로 전달
return Uri.withAppendedPath(uri, String.valueOf(rowId));
}
DBManager
DBManager는 ContentProvider로부터 받은 ContentValues 객체를 실제 데이터베이스에 저장하는 역할을 합니다. 내부적으로 getWritableDatabase() 메서드를 사용해 데이터베이스에 연결하고, 데이터를 삽입합니다.
예제:
public long insert(ContentValues addRowValue) {
return getWritableDatabase().insert(TABLE_STUDENTS, null, addRowValue);
}
전체 흐름 요약
ContentValues
객체 생성: ContentValues 객체를 생성하고, put() 메서드를 사용하여 데이터를 입력합니다.
ContentResolver
사용: ContentResolver.insert()를 호출하여 ContentValues 객체를 ContentProvider로 전달합니다.
ContentProvider
와 DBManager
상호작용: ContentProvider
는 받은 ContentValues
객체를 DBManager로 전달합니다.
DB에 데이터 저장: DBManager
는 데이터베이스에 연결해 ContentValues
객체의 데이터를 저장합니다.