막무가내 삽질 블로그

안드로이드 Room 데이터 베이스 본문

Android

안드로이드 Room 데이터 베이스

joong~ 2020. 2. 15. 02:20
728x90

이 글을 통해 참고 하실려는 분들은 다른 블로그를 참고하세요..... 아직 공부중입니다

 

 

안드로이드 룸에 대해 정리 한다.

룸은 SQLite의 기능을 모두 사용할 수 있고, DB로의 접근을 쉽게 도와주는 라이브러리!

 

자세한 내용은

https://developer.android.com/training/data-storage/room?hl=ko

 

 

 

룸의 구성 요소

Entity : 데이터베이스 안에 있는 테이블을 자바나 코틀린 클래스로 나타냄. 데이터 모델 클래스이다.

DAO : Database Access Object, 디비에 접근해 insert,delete 등을 수행하는 메소드를 가지고 있다.

Database : 앱에 영구 저장되는 데이터와 연결을 위한 액세스 지점, 테이블과 버전을 정의하는 곳

 

 

Entity

    @Entity
    public class User {
        @PrimaryKey
        public int id;

        public String firstName;
        public String lastName;
    }
    

각 항목은 하나 이상의 필드를 기본 키로 정의해야 한다.

Room 항목에 자동 ID를 할당하려면 @PrimaryKey의 autoGenerate 속성을 사용하면 된다.(= DB AUTO INCREMENT)

ex) @PrimaryKey(autoGenerate = true)

 

항목에 복합 기본 키가 있으면 @Entity 주석의 primaryKeys 속성을 사용할 수 있다.

ex) @Entity(PrimaryKeys = {"title", "description"})

 

기본적으로 Room은 클래스 이름을 데이터베이스 테이블 이름으로 사용한다. 테이블의 이름을 다르게 지정하려면

@Entity 주석의 tableName 속성을 설정한다.

ex) @Entity(tableName = "note_table")

※ 테이블 이름은 대소문자를 구분하지 않는다.

 

 

    @Entity(tableName = "users")
    public class User {
        @PrimaryKey
        public int id;

        @ColumnInfo(name = "first_name")
        public String firstName;

        @ColumnInfo(name = "last_name")
        public String lastName;
    }
    

tableName 속성과 마찬가지로 Room은 필드 이름을 데이터베이스의 열 이름으로 사용한다.

열의 이름을 다르게 지정하려면 @ColumnInfo 주석을 사용 하면 된다.

 

 

    @Entity
    public class User {
        @PrimaryKey
        public int id;

        public String firstName;
        public String lastName;

        @Ignore
        Bitmap picture;
    }
    

항목에 유지하지 않으려는 필드가 있으면 @Ignore를 사용하여 주석을 달 수 있다.

 

 

그 아래 부분은 아직 이해가 잘 가지 않으므로 패스한다. 좀더 공부해서 다음에 추가한다.

 

 

 

DAO

@Dao
public interface NoteDao {

    @Insert
    void insert(Note note);

    @Update
    void update(Note note);

    @Delete
    void delete(Note note);

    @Query("DELETE FROM note_table")
    void deleteAllNote();

    @Query("SELECT * FROM note_table ORDER BY priority DESC")
    LiveData<List<Note>> getAllNotes();
}

자세한 내용은

https://developer.android.com/training/data-storage/room/accessing-data?hl=ko

 

 

Database

@Database(entities = {Note.class}, version = 1)
public abstract class NoteDatabase extends RoomDatabase {

    private static NoteDatabase instance;

    public abstract NoteDao noteDao();

    public static synchronized NoteDatabase getInstance(Context context) {
        if (instance == null) {
            instance = Room.databaseBuilder(context.getApplicationContext(),
                    NoteDatabase.class, "note_database")
                    .fallbackToDestructiveMigration()
                    .addCallback(roomCallback)
                    .build();
        }
        return instance;
    }
  }

 

 

나중에 더 추가하도록 함

 

Comments