Room Database

Room은 SQLite의 추상 레이어를 제공하여 SQLite의 모든 기능을 활용하면서 유창한 데이터베이스 액세스를 허용합니다.


  • 데이터베이스 : 이 구성 요소를 사용하여 데이터베이스 소유자를 만들 수 있습니다. Sqlite를 사용하셨다면 기존에 사용하시던 데이터 베이스와 비슷한 과정을 거칩니다.

  • 엔티티 : 이 구성 요소는 데이터베이스 행을 보유하는 클래스를 나타냅니다. 각 엔티티에 대해 항목을 보유하는 데이터베이스 테이블이 작성됩니다. 

  • DAO : 이 구성 요소는 클래스 또는 인터페이스를 DAO (Data Access Object)로 나타냅니다. DAO는 Room의 주요 구성 요소이며 데이터베이스에 액세스하는 메서드를 정의합니다.


데이터 베이스

싱글톤으로 관리되어지는 entity.db라는 데이터 베이스를 생성합니다. @Annotation으로 Version과 Entity와의 관계를 설정합니다.

@Database(entities = {Entry.class}, version = 1)
public abstract class EntryDatabase extends RoomDatabase {
    private static EntryDatabase INSTANCE;

    public abstract EntryDao EntryDao();

    private static final Object sLock = new Object();

    public static EntryDatabase getInstance(Context context) {
        synchronized (sLock) {
            if (INSTANCE == null) {
                INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
                        EntryDatabase.class, "entry.db")
                        .build();
            }
            return INSTANCE;
        }
    }
}



Entity

@Entity Annotation을 통해 설정할 수 있으며 Primary Key뿐 아니라 Index설정및 Column 정보도 설정이 가능합니다.


@Entity
public class Entry{
    @PrimaryKey
    private int Id;
    @ColumnInfo(name = "name")
    private String Name;
}


DAO

@Dao Annotation을 통해 Entity와의 직접적인 쿼리문을 설정합니다.  row쿼리를 통한 결과 값을 Class Object로 객체로 생성하여 줍니다.

@Dao
public interface EntryDao {
    @Query("SELECT * FROM Entry")
    List<Entity> getEntitys();

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertEntity(Entry entry);

    @Query("DELETE FROM Entry")
    void deleteEntry();
}



Debug DB Library

Room으로 설정한 각 Entity테이블의 데이터를 Browser로 보여주는 library




Emulator로 확인하기위해 Port Forward

일반 Device라면 해당 과정없이 가능합니다.
adb forward tcp:8080 tcp:8080


Debug시에 DebugDB포트를 변경하려면

debug {
    resValue("string", "PORT_NUMBER", "8081")
}


결과

Chrome으로 해당 단말기에 Entity를 조회하고 결과값을 확인할 수 있습니다. 





+ Recent posts