막무가내 삽질 블로그
안드로이드 Room 데이터 베이스 본문
이 글을 통해 참고 하실려는 분들은 다른 블로그를 참고하세요..... 아직 공부중입니다
안드로이드 룸에 대해 정리 한다.
룸은 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;
}
}
나중에 더 추가하도록 함
'Android' 카테고리의 다른 글
Android ViewModel + LiveData + Data Binding (0) | 2020.03.01 |
---|---|
Android Jetpack Navigation (0) | 2020.03.01 |
안드로이드 액티비티 + 프래그먼트 생명주기 상태정리 (0) | 2020.02.10 |
안드로이드 애니메이션 효과주기 정리 (0) | 2020.02.08 |
안드로이드 커스텀 다이얼로그, android customdialog (0) | 2020.01.28 |