ContentValues란?

ContentValues 클래스는 Android에서 데이터베이스와 연동할 때 사용되는 데이터 집합을 저장하기 위한 유용한 도구입니다. 주로 ContentResolver와 함께 사용되며, ContentResolver는 앱과 ContentProvider 간의 중개자 역할을 합니다. 즉, ContentValues는 ContentResolver와 ContentProvider가 데이터를 주고받는 데 필요한 “데이터 운송 수단”이라고 이해할 수 있습니다.

ContentValues 사용 순서

  1. ContentValues 객체 생성

ContentValues 객체를 생성하여 데이터를 담을 준비를 합니다.

ContentValues addRowValue = new ContentValues();

  1. 데이터 입력

put() 메서드를 사용하여 (키, 값) 쌍으로 데이터를 입력합니다. 이 데이터는 DB 테이블의 컬럼 이름과 값에 해당합니다.

addRowValue.put("number", "200106054");
addRowValue.put("name", "홍길동");
addRowValue.put("department", "컴퓨터");
addRowValue.put("age", "18");
addRowValue.put("grade", 3);
  1. ContentResolver 가져오기

getContentResolver() 메서드를 통해 ContentResolver 객체를 가져옵니다.

ContentResolver resolver = getContentResolver();
  1. 데이터 삽입 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로 전달합니다.

ContentProviderDBManager 상호작용: ContentProvider는 받은 ContentValues 객체를 DBManager로 전달합니다.

DB에 데이터 저장: DBManager는 데이터베이스에 연결해 ContentValues 객체의 데이터를 저장합니다.