본문 바로가기

Development/Android Studio

(Android Studio) Chapter17. Room Database

1. 기본 개념

  1) Database

    - UI를 통해 사용자가 상호작용하여 접근하거나 새롭게 생성된 데이터들을 관리하기 위한 일종의 컨테이너 기능

    - IUD기능 및 조회기능은 필수요소

    - 가장 기본은 테이블 형태로 관리

 

  2) 기본 프로세스

    - 메인에서 데이터베이스 생성

    - Dao에 insert쿼리를 날림

    - 유저데이터 삽입

 

2. 기본 구조

  1) 빌드 프로세스를 위한 필수 요소

    - 데이터베이스 라이브러리 불러오기

    - 관리할 데이터 컬럼 설정(새 class 생성)

    - 각 컬럼의 정보를 받아오고 셋팅하는 기능 구현(getter & setter)

    - 각 컬럼에 포함될, 또는 포함된 데이터에 대한 IUD 기능 및 조회기능 구현(DAO)

    - 데이터베이스(일종의 컨테이너) 정의 

 

  2) 빌드 예시

    - Room Library implement

dependencies {

    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.8.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    implementation 'androidx.room:room-runtime:2.4.2'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
    annotationProcessor 'androidx.room:room-compiler:2.4.2'
}

    - User.java class 정의 : Entity, PrimaryKey import > 정보 전역변수 정의 및 getter & setter 정의(Win: Alt+Insert / Mac: Command+N)

package com.example.roomdatabaseexample;

import androidx.room.Entity;
import androidx.room.PrimaryKey;

@Entity
public class User {
    @PrimaryKey(autoGenerate = true)
    private int id = 0; // 하나의 사용자에 대한 고유 ID 값, 전역변수

    private String name;

    private String age;

    private String phoneNumber;

    //getter & setter 가져오거나 세팅을 하기 위한 준비 단계, command+N을 통해 자동 완성

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
}

    - 삽입, 수정, 삭제, 조회 쿼리 정의를 위한 인스턴스 생성(Data Access Object 임의로 정의)

package com.example.roomdatabaseexample;

import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;

import java.util.List;

/**
 * Data Access Object
 */

@Dao // IUD 선언
public interface UserDao {

    @Insert // 삽입
    void setInsertUser(User user);

    @Update // 수정
    void setUpdateUser(User user);

    @Delete // 삭제
    void setDeleteUser(User user);

    // 조회 쿼리
    @Query("SELECT * FROM User") // 쿼리: 데이터베이스에 요청하는 명령문 / 'SELECT *' = 다 보여달라는 뜻
    List<User> getUserAll(); // 모든 유저의 데이터를 리스트에 담아서 보내달라.

}

 

    - 데이터베이스 정의(RoomDatabase를 extends 해서 추상클래스 선언하고 UserDao 받기)

package com.example.roomdatabaseexample;

import androidx.room.Database;
import androidx.room.RoomDatabase;

@Database(entities = {User.class}, version = 1) //  버전이 존재 해야 추후 업데이트 용이
public abstract class UserDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}

 

※ 공부 필요: SQLite